Enable injection of the underlying *redis.Pool

This change set adds a new constructor which enables dependency injection of the underlying *redis.Pool which is necessary in scenarios where you're managing many pools on a global level and want to reuse them.
The rest of the changes is meant to reuse the new code which also make it automatically tested.