Add a missing 'final'
Correct TaggedNode comment: the tag is NOT optional
Make macro expansion construct new nodes, rather than mutate existing ones.
Make all AST nodes immutable