Add SIGINT protection to our `pdbpp` based debugger subystem such that for (single-depth) actor trees in debug mode we ignore interrupts in any actor currently holding the TTY lock thus avoiding clobbering IPC connections and/or task and process state when working in the REPL. As a big note currently so called "nested" actor trees (trees with actors having more then one parent/ancestor) are not fully supported since we don't yet have a mechanism to relay the debug mode knowledge "up" the actor tree (for eg. when handling a crash in a leaf actor). As such currently there is a set of tests and known scenarios which will result in process cloberring by the zombie repaing machinery and these have been documented in https://github.com/goodboy/tractor/issues/320. The implementation details include: - utilizing a custom SIGINT handler which we apply whenever an actor's runtime enters the debug machinery, which we also make sure the stdlib's `pdb` configuration doesn't override (which it does by default without special instance config). - litter the runtime with `maybe_wait_for_debugger()` mostly in spots where the root actor should block before doing embedded nursery teardown ops which both cancel potential-children-in-deubg as well as eventually trigger zombie reaping machinery. - hardening of the TTY locking semantics/API both in terms of IPC terminations and cancellation and lock release determinism from sync debugger instance methods. - factoring of locking infrastructure into a new `._debug.Lock` global which encapsulates all details of the ``trio`` sync primitives and task/actor uid management and tracking. We also add `ctrl-c` cases throughout the test suite though these are disabled for py3.9 (`pdbpp` UX differences that don't seem worth compensating for, especially since this will be our last 3.9 supported release) and there are a slew of marked cases that aren't expected to work in CI more generally (as mentioned in the "nested" tree note above) despite seemingly working when run manually on linux.