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 
I guess it's an old optimization habit.  Since the list might change size, it has to check the length of the list each time through the loop, so an optimization if you know the loop doesn't change size is to precompute the size and just use that.