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
Cool, good idea. I'll add a TODO - I think it's a bit larger than the scope of this CL - but it makes sense to me.

I just verified, and Ace is tolerant of scroll and selection positions that are outside current bounds.