AbuseFilterTokenizer is referentially transparent -- the mapping of input to
outputs does not vary on nonlocal state. So the cache TTL can be much longer.
Change-Id: I9e6ec4347dbb940c3d73538d550a0f045706264c
* Move AbuseFilterParser::nextToken() and the various AbuseFilterParser
properties that accompanied it to a new class, AbuseFilterTokenizer.
* Tokenize rules eagerly and cache the result in APC.
Change-Id: I15f5b5b65e8c4ec4fba3000d7c9fd78b98967d1d