Big refactoring for more useful error messages.

- Errors now print local and subtree indicators for the position of
  error messages.
- Parser and lexer extended to track left and right (and subtree left
  and right) positions of AST nodes.
- ParseData structure stores some precomputed lookup tables which we use
  to match character positions with lines in the input source code.