Refactor the do_diff and manual child view lists into a separate ViewList object

This PR attempts to factor out the maintaining of child view lists from the WidgetView class.  Advantages include:

* Ability to easily have different types of containers for child views
* Less code in WidgetView
* Most importantly, the ability to easily have multiple kinds of child view lists (for example, suppose you have a two-column widget, and you want a separate child list for the left and right).

CC @jdfreder, @ellisonbg 
If views becomes a list of promises, you might not need the `state_change` promise anymore.