Implemented infrastructure for undo/redo in edit tool.

Added handling of the following special when moving models:

If target canvas is contained with the source canvas, then special care
needs to be taken as to predicting the location of target canvas after
the move has taken place:
- If index of target canvas > index of model to be moved, then the
predicated index of target canvas should 1 less

Signed-off-by: Jakob Brandsborg Ehmsen <jakobehmsen.github@gmail.com>