SVG support

This SVG approach builds on earlier commits. I wrote it on top of the IE patch then rebased it back down to master. So either PR can go first.

When a template is run, the namespace is detected from the `contextualElement`. If a `contextualElement` is not provided, there is a chance the root elements will be created with the wrong namespace. During fragment build, if there is a new namespace that child elements expect, then `setNamespace` is called. The `DOMHelper` is dumb about state, it just keeps track of the last namespace. Doing this in the compiled output will perform better than checking the parent element every time we do a `createElement`.

For SVG to work seamlessly between templates, helpers must pass the `contextualElement` to `render`.

```JavaScript
options.render(context, env, morph.contextualElement);
```

Simple template output.

```JavaScript
(function() {
  function build(dom) {
    var el0 = dom.createElement("div");
    dom.setNamespace("http://www.w3.org/2000/svg");
    var el1 = dom.createElement("svg");
    var el2 = dom.createElement("circle");
    dom.appendChild(el1, el2);
    var el2 = dom.createElement("desc");
    dom.setNamespace(null);
    var el3 = dom.createElement("span");
    dom.appendChild(el2, el3);
    dom.appendChild(el1, el2);
    dom.appendChild(el0, el1);
    return el0;
  }
  var cachedFragment;
  return function template(context, env, contextualElement) {
    var dom = env.dom, hooks = env.hooks;
    dom.detectNamespace(contextualElement);
    if (cachedFragment === undefined) {
      cachedFragment = build(dom);
    }
    var fragment = dom.cloneNode(cachedFragment, true);
    return fragment;
  };
}());
```