Switch to a deque in CachedThreadScheduler

- Use a deque and let each event loop keep track of it's expiration time

- Make to not block forever while looking for a cached event loop

- Better naming for event loop pool class and methods to take and return event loops