Introduce sharded Redis engine

Our Redis backend is becoming CPU bound so we need to shard the keys
Faye uses over multiple Redis systems to reduce the amount of work
each system needs to do.

This change introduces a lightweight wrapper to abstract using a
distributed set of redis servers. The Engine now accepts an array of
Redis URL strings in the servers option key. Note that since pub/sub
isn't shardable, the first server provided will be used as the bus.

The only significant change made to the existing engine is the call
to multi. The signature for multi has been changed to accept a key
so that it can return a specific connection. This implies that multi
can only operate on one key only per call and leveraged for atomicity.
That said nothing enforces this: multi returns a connection on which
anything can be called. Utilitor emptor.