Implement macros.

Adds a new function, expandMacros, to the ASTNode type, which returns
the node after having expanded macros. A node is returned because the
type of the node may change, and so this needs to be accounted for.
Initially I was going to add a "passthrough" node type, but that would
have made the AST messy. Default simply recursively expands macros in
children, only MacroNode does something fancy.

To avoid macro loops, there is an expansion limit which is set
(currently to 100) when rendering a full page, and decremented every
time the renderInternal function is called. This value may need
tweaking.