Merge undo-redo

Undo / redo don't quite work, but I got sidetracked so it's more than just that. 

Angular loses the reference to the original budget on replacement of the dataService.state model, so we need to find a way to either re-render the tree every undo / redo (tried ng-if trick, didn't work) or discover a magical workaround that will solve all our problems and make everyone happy in the world.