refactored runTunnel and tunnel to use less shared memory and more resemble an idiomatic Go processing pipeline; refactored conn to support an explicit, synchronized interruption list and cleanup race conditions related to unsynced access to shared memory