Add a bunch of traits to Lexer to make LexerRules more powerful so we can handle tokens with more context