Promise of the in-flight Chrome launch. Settles exactly once for the
initial launch and is replaced whenever recoverBrowser runs. Awaited
inside handleRun (via awaitBrowser) so a run request that arrives
before Chrome is up waits the same amount of time it would have waited
for the synchronous launch — but daemon start/ping/status return as
soon as the socket is up. Decoupling Chrome from socket readiness is the
fix for the "Daemon did not start within Ns" timeout class on slow CI.