debugger: doBreakpoints() extracted from BeforeExecute().
debugger: assorted small fixes to command handling.
debugger: extract commandLoop from BeforeExecute (doesn't loop yet).
debugger: BeforeExecute doesn't return until step/run/etc.
debugger: break-instruction argument is case-insensitive.
main calls mainReturningStatus, so defer can be used in latter.
All exits happen through exitChan, makes defer reliable.

os.Exit(status) doesn't trigger `defer` statements. Instead, send status
to an exit channel, which mainReturningStatus() returns (triggering
defers) to main() which exits with that status.
debugger: liner.Close() at exit, to revert to sane terminal.

Otherwise, the terminal settings which liner establishes make strange
things happen thereafter, especially around tabs, and the enter/return
key appearing as ^M.
indirectX (indexed indirect) addressing mode corrected.
indirectY (indirect indexed) addressing mode corrected.
CPU status printed before dumping core for non-zero exit.
debugger: comment lists TODO items.