comms/BasicNode: spawn coroutines, dispatch thread in `launch`, not ctor
comms/BasicNode: acquire lock on halt mutex before waking parent thread
comms/BasicNode: halt if handshake doesn't finish in 5s from launch
util/WorkerObject: + WorkerThread c/dtors to ensure (de)initialization