More work on frame/widget separation.

This is starting to take shape, but still broken; right now the example
launches a window with no contents.

Additionally, I've made a slight cleanup to the Model class (based on a
suggestion from Martin).