Allow widgets to display more than once within container widgets.

Adds the ability to display multiple widgets within container widgets and adds indexing by view.id in addition to model.id.

closes #5958
I know this was a problem before, but it does seem a bit weird that the parent is managing the child model's list of views.  That seems like it should be the child model's responsibility (and we should be calling something like `child_model.remove_view(view)` or something).  Not saying it needs changing in this pull request, but it does seem a little weird.