Fixed small ast0 bug

Unused variant
Renamed some Ast0 variants
Added AST type for post-parse-check AST

Has separate node variants for patterns and expressions, and
for contexts and types.
Fixed ast0 fold and print funs after renaming
Fixed up some comments
Fixed ambiguous field names
Added identity post-parse function

Building functions with regexes ugh what a mess
Wrote basic framework of post-parse checks

Still need to implement context and pattern checks in detail.
Implemented check_context

Finds and parses anything that should be a context but was parsed as a type,
raising errors where appropriate. Converts Ast0 to Ast1.

Untested.
Refactored a bit, bug fixes

Now uses do_bound (like do_bounds in semantic actions) to easily
push those stupid block bounds around.
Fixed up check_context to use do_bound better
Implemented check_pat
Fixed a bunch of small compile errors
Refactored do_bounds into src/ast.ml

Also using it in parse_check
Refactored do_bound -> do_boundcpy
Implemented check_bind

Checks pattern and function left hand sides. Still need to fix stupid checked
exception crap
Added little monadic option helper

I miss coding in haskell :(
Refactored check_bind to not use checked exns

Now have really hideous monadic option version of check_pat, called
check_if_pat, and call it in check_bind and check_pat
OCaml data constructors are not first class funs

Why not is anyone's guess. The language spec is lazy or something.
OCaml indent algo doesn't understand nested match

To be precise, it associates every pattern case with the innermost match, even
if the indent level has decreased between the start of that innermost match and
the current case. Need to parenthesize inner matches to avoid this.

Why am I using this language?