handshaking
A 2-peer Seam for transports that do NOT carry identity out of band. Sends a Hello preamble as the first frame, awaits the peer's preamble, then delegates to identified over the same single collection of Connection.incoming. Suspends until the peer's preamble arrives.
Single-collection safe. Connection.incoming is collected exactly once: the conn is wrapped with singleCollection, which starts one pump coroutine that drains the delegate's incoming into an internal channel. The preamble is read from that channel, and the post-preamble frames are handed to identified from the same channel — there is never a second delegate.incoming.collect. This makes handshaking correct over a cold, single-collection Connection (the shape a stream fabric's framed() produces) as well as over a hot channel-backed one (us.tractat.kuilt.test.fabric.connectionPair). Stream fabrics no longer need a hot-reader pump of their own.
Parameters
Scopes both the single-collection pump and identified's read/write loops, so the preamble drain shares the seam's (and tests') clock. Production callers pass Dispatchers.Default.limitedParallelism(1); test callers pass a dispatcher derived from the test scheduler.