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
this do_diff function really is a general utility function---again, not necessarily on this PR, but it should probably be moved out to a general utility class at some point.