fun start(scope: CoroutineScope): Job Begin polling on scope. Idempotent — calling twice is treated as a restart on the new scope; the previous loop is cancelled. Returns the Job driving the loop so callers can join or cancel it directly if they prefer.