awaitReachable
Suspends until status becomes NetworkReachability.REACHABLE, returning immediately if it already is. Requires start to have been called; otherwise the status stays NetworkReachability.UNKNOWN and this never resumes — bound it with withTimeout for standalone use (the retry path already does).