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.