Use `ViewComposer` to drive view building

This is a design decision that allows composed parts of a view (e.g.
partials, containers) to be accessible from backend code.

The view remains precomposed for cases where the underlying components
of the view are not modified. This retains the performant aspect of
view building in that work is done up-front or at the last possible
moment.
Add `Container` object

Makes it possible to treat a container as a View. Examples:

presenter.view = page.container(:default)
page.container(:default).to_view.remove
Add `Container#remove`
Rename `View#refind_significant_nodes` to `View#invalidate!`
Invalidate ViewComposer when parts are changed

Container/Partial now subclass View, which is now aware of what it has
been / is being composed with. This knowledge is passed to View objects
created during traversals.

When something changes (e.g. `remove` is called or `attrs` is set) the
View invalidates its related Composer if available.
Handle view replacement in no parent case
Remove unnecessary code
Fix failing processor tests

Turned into a bit of a refactor to remove duplicate mock request code.
Add 2.1.0 to ci
Fix view iteration
Set context of view
Fix some weirdness with simple templates

- Mixes in hooks defined with templates to routes defined within a
  template expansion. This allows simple templates to be created that define
  hooks only.
- Allows templates to be expanded without providing a name. The only
  caveat here is that it assumes the template is defining hooks and not
  actions, groups, namespaces, etc. For simple cases only.
Fix issue including multiple partials of same name into page
Always act on ViewComposer

Presenter#view now always returns the ViewComposer (unless the view has
been overridden in which case it returns a View). This forces the
developer to always interact with the parts rather than the whole.

This is transparent to the developer. ViewComposer allows the parts to
be treated as a whole, while waiting until the last possible moment to
actually compose the view.
Set attributes hash style
Prevent error looking up at index that doesn't exist
Handle converting View/ViewCollection to content along with ViewComposer
ViewCollection#prepend
Handle HEAD requests
Explicitly set context when finding sub-views in a view collection