Initial undo implementation

working:  transforms, additions, deletes
not working:  alignment, transforms with widget, segment changes,

will need to squash these commits later
added undo for the remaining operators.

Shift, Segment, and Widget Transformations

If you initiate a widget transform, and come back to the center of the widget to cancel it,
there will still be an undo entry so it may appear as if nothing happens when use undoes after
that because it is essentially a snapshot of the same scenario

Much testing should be done on this before release.  Eg, please try to break it!