Rewriting AST type

Using type system to enforce AST children / parents is not worth the enormous
number of extra types we need to create.

So just have an overall AST type and use it for all nodes, with lots of
variants for different types of AST nodes. This means that as far as the type
system is concerned anything in the AST can be a child of anything else.
Refactored lexer a bit

Tokens now store starting and ending raw string indices rather than fancy
line/column info. Also unlayout simply takes in the source string rather than
those ridiculous curried functions.
Finished writing AST type

Now "just" need to write the grammar with appropriate semantic actions to build
this AST.
Typing in haskell grammar

Trying to find a way to do this that won't take years.