Don't call remove when setView called twice.

* check if replacing view is already there before removing
* add a few new tests on the way to getting to the bottom of this.

This was caused by setView being called multiple times on the same view
with the same selector.  It resulted in 'remove' being called, detaching
event handlers and un-mounting nested sub-views.