Rename AST free-list.
Save line number where the token starts for improved error messages.
Rewrite lexer to use a proper lookahead token.

Easier to understand, and in preparation for reading UTF-8.