When we support undo/redo, patch changes should be grouped together with the most recent non-patch change snapshot and treated as a single step.
e.g. if we have a stack of snapshots [A, B, C, D] where D is the current snapshot and C is a patch change. When undo, we should go back to C. When undo again, we should go back to A instead of B.
Static
create
Only use this if an absolute identical clone is needed. This should rarely be used, and ideally by core engine only.