Tear everything down.
Detaches the bound thread (so no further bind() calls reopen
runtimes) and disposes every live runtime in parallel. Safe to
call multiple times — subsequent calls find an empty registry
and resolve immediately.
dispose(): Promise<void>