Third pass at supporting namespaces, SVG

This namespace implementation involved several steps.

  1. As the parser (token-handlers) sees elements, it flags them with
     namespaces, or as being HTML integration points.
  2. As the ast walker handles these elements, it emits opcodes to open
     and close dom helper contexts.
  3. As the template compiler runs, it manages a stack of dom helpers, a
     list of variable names, and emits opcodes for picking a dom helper
     to the fragment and hydration compilers.
  4. At completion, the template compiler puts all dom helper variables
     into the shared scope of the template. The build and hydration
     steps share access to this scope.
  5. At runtime, the initial dom helper instance is passed to the
     template (or defaulted) as `dom` in scope.
  6. The fragment and hydration sections use the proper dom helper
     object as signalled by their compiler.

Templates can now be passed a custom dom helper at runtime:

    var template = compile("<svg></svg>");
    template({}, {dom: new DOMHelper(document)});

This allows hooks or helpers the change to change the DOM namespace or
root document for their inner content, and possible inject their own
custom dom helper.