Major refactoring: matching states have been separated from tokens
Each token can register a state object inside the Matcher's "global" state. All state information is stored there
so that one Token object can deal with whatever state is passed to nextMatch() at any time.