Avoid async operations while protect is running

Sockets were being associated with random unrelated requests that were executing when the incoming socket connection is made due to the domain entry and exit spanning multiple event loop cycles.

Additionally this pattern was prone for other concurrent execution issues where the domain stack is left in an unexpected state due to races between two concurrent requests, i.e.

```
request1.enter();
request2.enter();
request1.exit();
```

Causes the domains stack to be cleared of both request1 and request2 even though request2 is still executing.