Wait smarter for an empty connection pool

The current behavior means that calling `.disconnect()` will unnecessarily wait for at least 500ms before the `Deferred` returned fires. It's trivial to, instead, return a `Deferred` which fires as soon as the last client in the pool disconnects.