* Implement undo/redo
* TODO some minor things
Finish undo-redo feature