Use Handlebars AST nodes

Reuse existing Handlebars AST nodes to improve compatibility.

children/inverse arrays of blocks/elements are now wrapped in a ProgramNode.

Rename HTMLElement to ElementNode.