Allow VMs to set default in their constructor.

This also required making sure that nested viewmodels get initialized so that the user-specified data would be honored.

Fixes #9.
is it an issue here about not including "initialize", "onInitialize", "onDispose"?

originally, i actually stored all "data" in a "data" object. that made it much easier to tell what is data vs not. That got pretty messy on consumption. Basically accessing viewmodel data would be like:
 
view.viewModel.data.foo.data.bar.data.baz

another approach is the reverse, to namespace all "viewModel" stuff in a "__model" property that gets ignored, so calling vm initialize might be:

view.viewModel.__model.initialize()

then everything gets set on viewModel, and there's only ever one "special" thing that isn't part of the viewmodel (_model and everything under that).