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.

I've added a lightweight wrapper to abstract accessing a distributed
set of redis servers.  The Engine now takes an array of Redis URL
strings in the servers option key. Note that since pub/sub isn't
shardable we just use the first one provided as the pub/sub 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 be leverage for atomicity
though nothing enforces this.