Flatten nested combined link functions.

When combining a list of link functions, detect if any of them are the
result of combining another list of link functions and, if so, flatten
them out into a single function.

This will reduce the layers of indirection caused when combining together
link functions produced for the same level of the tree.
Rewrite compiler to produce a fresh DOM.

Rather than cloning the template DOM and mutating it, it turns out to be
fast enough (and simpler) to just produce a fresh DOM each time a template
is linked to a scope.

As of this commit we just support basic interpolation and not yet
directives. Support for directives will add some complexity to
makeElementLinkFn but will build on what's in this commit as the default
case.