Container destroy fix

Works around an issue where container.destroy failed to properly destroy
its children.
Better route teardown
CollectionView cleans up emptyView - Fixes #1957

Previously, if emptyView was a class, CollectionView would create an
instance but never destroy it.
Clean up after views in tests
Clean up unused/duplicate code
Prevent overwrite on view registration

See #1553