Use Handlebars AST nodes

Reuse existing Handlebars AST nodes to improve compatibility.

Children arrays of blocks and elements are now wrapped in a ProgramNode.