refactor of AST to be structs instead of wrapped enums...no more runtime pattern matching butttt good codegen properties...not completely convinced this is the way to go though