Changed RedisSubscriber wait with TaskCondition vs Timers

This update provides stability and performance improvements to the `RedisSubscriber`:

- Uses `TaskCondition` notifications rather than rearming timers throughout the class.

- Permits queuing actions in case multiple tasks are communicating, the old Timer/null check method had undefined behavior.

- Fixes an error with the `ConnectionPool`, where connections could be re-used after they were closed. An assertion on the new event driver required this fix.
This should be covered with the `scope(exit)` on line 927, since the `pubsub_handler()` is only called through the while loop under there. The only points of failure now that I think of it would be `runTask` and `vibe.concurrency.send` at line 919..., I'm not sure if these functions can throw though?