Make GetNextToken take a ResettableRuneReader.
Change Lexer to return longest match from all rules.

I had to redesign how TokenRecognizer worked, and rewrite all the existing recognizers to match.
Also StringRecognizer had to be changed to only matching a single string, because multiple matches would make it too complex.
Extract method from tests.