Split ast into separate files.
Use a base "program" node for the AST. All ast nodes do not need children.
Make root the true root of ast nodes with children.  Allow ParseReturns to contain multiple ASTs using a vector.