First shot at removing the AST layer.

The AST layer is being removed because it doesn't really serve a useful
purpose. In particular when creating a streaming parser the AST nodes would
only introduce extra overhead.

As a result of this the parser will instead emit a DOM tree directly instead of
first emitting an AST.
Move linking of child nodes to a dedicated mixin.
Revert "Move linking of child nodes to a dedicated mixin."

This doesn't actually make things any easier. It also introduces a weirdly
named mixin.

This reverts commit 0968465f0c8ffc60c37fc5eebe59e76df6e43d4f.