Undo/redo fixes

Fixes #323 

#322, which enabled state eventing for tree properties, freed us up to fix #323 - the `tokenRemoved` event is now taking the correct steps to be undone/redone properly.

`StateChange` is now responsible for firing `state` events in its `exec()` function.