Have AST be closer to native Go
Move the generic topdown to its own file