Big overhaul of the undo/redo system.  The responsibility of committing
to the Git repository was moved to the UI instead of of the
project-to-message-passing abstraction layer.

This way, undo history can better be one-entry-per-action, instead of
having situations where 3 undos are required to fully undo one action.

This is a prelude to a CTRL+Z/CTRL+Y undo/redo function...