feat: broaden QB45 compatibility across interpreter, mouse, and grab
Driven by making more qbasicapps programs run correctly:
- interp: cross-block GOSUB/RETURN. GosubJump collects the origin
context chain as it unwinds; RETURN rebuilds the nested origin via a
pending resume inside the pc loop's try, so enclosing loops keep
iterating and later GOSUBs still resolve (truth.bas NOT handling)
- interp: Cell stores arrays separately from scalars, so a scalar and
an array with the same name coexist like in QB45 (3D graph.bas)
- interp: LINE accepts the omitted-start form, drawing from the
graphics cursor (Interferogram.bas)
- parser: THEN may be omitted before GOTO/GOSUB; punctuation peeks are
type-aware so string literals like ASC(")") parse (Lottery
analysis.bas, truth.bas)
- machine: mouse TSR tracks held buttons and re-arms the latch on
every read-and-reset, like the real per-tick poll (mousedrv.bas)
- frontend: one transparent grab overlay per screen fixes cursor
escape on multi-monitor setups; mouseReleased forwarded as button-up;
-Dcrtbasic.grab.auto diagnostic
- drivers: GameDriver gains --block, $ mid-run screenshot token, and
b<n>- mouse release token
- tests: regression coverage for all of the above