added templating with subviews support

@todo - code comments

The Widget class can be structured as multiple templates with bound
data from the model and subviews, each with it's own model and subviews.
When the model changes, the Widget rerenders with the new data.
Each attribute in the model corresponds to a variable from the template
attached to the view.
 -- Future Implementation --
Models can be obtained from inside a collection, corresponding to the
current state of the app.