refactoring
CRTP for AST

one 'public final void accept(Visitor visitor)' to rule them all!