Basic AST

It's not fully fleshed out yet. I haven't decided yet whether I want to special-case it or look into implementing a subset of Generics to do it properly.