When a timeout happens `uv_cancel()` is called, but the problem is `uv_cancel()` can return `UV_EBUSY` and not cancel the request immediately. Instead timeouts should call the callback immediately and then cancel the request (however, this still causes the loop to pause for the OS's resolve timeout).