Fix bugs in idle timer

- Was only starting idle timer after canceling requests, not after completing all requests
- idle timer handler block was deadlocking on the socket queue, now it uses the global concurrent queue