function Lexer(input) {
    this._input = input;
}
The Lexer class handles tokenizing the input in various ways. Since our
parser expects us to be able to backtrack, the lexer allows lexing from any
given starting point.

Its main exposed function is the `lex` function, which takes a position to
lex from and a type of token to lex. It defers to the appropriate `_innerLex`
function.

The various `_innerLex` functions perform the actual lexing of different
kinds.