awaitBudget

How long awaitPeers / awaitFrame wait before failing with the state they observed — virtual time, null to wait unbounded.

Virtual is safe here by contract: newHarness is handed the test dispatcher precisely so server- and client-side seams share the virtual clock, so nothing under this suite advances real time and the trajectory is identical on every run. A harness that nonetheless does real I/O must override this to null — virtual time would fast-forward the whole budget while the frame is still on the wire, the way it red-lit a working TcpConformanceTest in #2069/#2115 — and take runTest's own TEST_WEDGE_BACKSTOP as its backstop.