refactoring to ace.dart

- add a state manager to allow ui components to easily store and retrieve UI state. These are essentially settings that will never need to be user editable (the current scroll position of a file, or the position of a splitter)
- add a state manager implementation backed by chrome.storage.local
- refactor ace.dart slightly so that the editors save and restore their own state, instead of relying on an outside agency to do that
- remove most of the state stuff from the editor.dart file.

All this work is to recouple editors.dart from ace a bit. A few more refactorings will follow, to tease apart our architecture for ace, editors.dart, and editor_area.dart.

@umop
Might want to save the SHA of the current line or the current file, too, (or at least save a TODO) so that we don't restore cursor state to a (significantly) changed file. Also, ace will probably handle out of bounds cursor position in the aforementioned scenario, but wanted to make sure you tested for it (ie. file is truncated between sessions).