Wrote clean interface for lexer

Lexer now has multiple exposed steps:

source ---prelex--> ---postlex--> ---unlayout--> parser input

prelex:
- read in source, produce queue of lexemes
- remove comments
- detect lexing errors

postlex:
- identify reserved words and operators
- copy lexeme contents
- convert raw indices to line / column nums

unlayout:
- insert tokens based on whitespace
[Haskell 98 Report, section 9.3]

and 2 helper functions
source ---compute_indents-->      indent level of each line (for unlayout)
source ---compute_line_and_col--> line and col nums (for error reporting)

Not yet implemented.
Removed Var/Con distinction in prelex phase

Will distinguish them later when we filter out reserved words
and symbols. Also, added some comments.
Finished main loop of prelex phase

Lots and lots of match cases.
Fixed a bunch of typos
Implemented escape sequence lexing

Also fixed newline in char literal error
Fixed lots of small typos

Still haven't actually run the code (in fact, it doesn't even link correctly)