first pass of AST impl including unit tests