Scan for field terminators through a lookup table
`until` tested every byte against each terminator in turn, so scanning an unquoted field cost three or four comparisons per byte. The quoted path scans for a single byte and was therefore more than twice as fast as the unquoted one, which is backwards: quoting is the case with more work to do, not less. Hoist the inner loop into a 256-entry table built once in `init`, so a byte is classified in one load. Measured over the benchmark shapes: plain 498 -> 1389 MB/s +179% plain-crlf 518 -> 1373 +165% wide 485 -> 811 +67% long-fields 742 -> 2797 +277% one-column 257 -> 345 +34% quoted 1070 -> 1076 +0% `quoted` does not use this path and is unchanged, which is the control. A 32-byte `StaticBitSet` was tried instead, to keep the tokenizer small: clearly worse, 1000 against 1389 MB/s on `plain`, so the byte table stands despite its size. `until` is kept as it was, since it is public API; the table is reached through `untilAny` beside it. Behavior is unchanged, and checked rather than assumed: the existing tests plus 1.5 million fuzz iterations against the reference parser. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NGYDXszLdpBxhkfqqHp17B