Refactor DOMHelper, introduce contextualElement

Template execution now requires both hooks and the dom to be passed in.
For example:

    template(context, {hooks: hooks, dom: new DOMHelper()});

Optionally, you can provide a contextualElement to the DOMHelper. This
will allow it to resolve un-escaped HTML rendering issues:

    var template = compile('{{{html}}}');
    var tableElement = document.createElement('table');
    template({html: '<tr><td>Yo</td></tr>', {
      hooks: hooks,
      dom: new DOMHelper(tableElement)
    });

When block or component hooks are called in hydration, they are passed a
DOMHelper instance with the current contextual element. This allows
templates like:

    var template = compile('<table>{{#test}}{{{html}}}{{/if}}');
    template({html: '<tr><td>Yo</td></tr>', {
      hooks: hooks,
      dom: new DOMHelper(null, document)
    });

To run properly. The `test` helper just needs to pass the env (which
contains the proper contextual element) through to the inner render.

This code also prepares htmlbars for changing namespaces based on the
AST.
Move DOMHelper into the morph package