"expected 'cat' found 'cat'".  That's a bit unusual.
Stringify term in CustomScanner.  Doesn't solve the problem.
Better debugging, but still no progress on what's up.
Even better debugging, using events, except it's kind of worse.
A slightly different error mode.  I'll take it.
One bug fixed, one to go.
Expose that a 'passing' test actually fails.
Make scanner NOT store token.  Only 1 fail; the new tests pass.

--HG--
branch : no-stored-token
Keep.  Improving.  Debugging.

--HG--
branch : no-stored-token
Sub-scanner uses its own interpreter.  More debugging.  2 fails.

--HG--
branch : no-stored-token
More tests, more debug, some asserts, one more try/except.  Feh.

--HG--
branch : no-stored-token
More tests in a vain attempt to understand.

--HG--
branch : no-stored-token
Remove all exception-flows.  No improvement, BUT... saw a worthwhile case
(ProductionScanner fails to scan anything, which could happen just at
the end of the string with next_tok() even if everything in the string
parsed hunky-dory) to investigate.

--HG--
branch : no-stored-token
Right... EOF may not be the whole problem, here.

--HG--
branch : no-stored-token
Diagnosis: ProductionScanner can't unscan correctly.  position...

--HG--
branch : no-stored-token
Seems like a good way to fix it.  Doesn't fix it.

--HG--
branch : no-stored-token
repr's.  An interpreter only ever has one scanner.  Promising.

--HG--
branch : no-stored-token
HUZZAH

--HG--
branch : no-stored-token
Clean up tests and documentation and comments.  next_tok -> peek.

--HG--
branch : no-stored-token