Good, clean MVVM separation

Quite an overhaul:
* Models are now completely dumb
* ViewModels are instantiated neatly, in a cascading top-down fashion
* Views are bound only to ViewModels
* Folder structure to reflect MVVM