Deferred shutdown work for a session that has already been removed from
the manager. finish() joins the session thread and clears any call
routes the thread registered while shutting down. Callers must release
the SessionManager lock before calling finish(). Joining under the lock
deadlocks: the dispatch thread needs the lock to drain the event channel,
and the joined thread can be parked on a full event channel send.
Sender for typed runtime events produced by session threads. IPC sessions
share a bounded connection writer lane; in-process sessions write directly
to their own bounded output lane so one backpressured VM cannot stall or
destroy unrelated VMs in a global dispatch thread.