get/set placeholders
Remove config.h which was accidentally added to the repo
Add a method to easily hash a ZVAL
Initial commit of RedisCluster send/receive loop for commands.
Every time we communicate with the cluster we have to determine
which slot to try, and then if we get a MOVED or ASK redirection,
retry at the new slot.

In the case of MOVED, we'll update the node mapping we cache locally.
For ASK, we'll leave it unchanged but try at the slot where directed
Integrated command loop processing to send command to our
Redis Cluster instance, as well as formalized a generic
macro we will use for any return type.

Further work to be done creating the response parsing generics
and then later in combining them with standard phpredis response
parsing.
Modify redis_serialize and redis_unserialize

Modify these functions to accept a direct serializer value, rather
than a RedisSock pointer, such that we can re-use them in the
context of a cluster, without having to set each individual
RedisSock object to the mode when it's set/changed.
Remove TSRMLS_CC from redis_key_prefix

redis_key_prefix doesn't use any methods that require
TSRMLS_CC, so remove it from all of the calls.

This is to prepare for making command construction generic between
phpredis and phpredis-cluster implementations, so they can share.
Revert to using a RedisSock pointer for serialization
Added a 'k' type to redis_cmd_format_static

Added a specialized string type "key", or 'k' specifier
to redis_cmd_format_static, which takes the length as
well as a RedisSock* pointer, and will automatically
prefix the key if we should.
Add a 'v' type to redis_cmd_format_static

Added a new format specifier, 'v', to redis_cmd_format_static
which stands for 'value', meaning that we can automatically
serialize the value if our RedisSock* object specifies that
we should.

This should remove quite a bit of redundant code
Incorporate TSRMLS_CC into redis_cmd_format_static

Add our TSRMLS_CC argument to each instance of
redis_cmd_format_static.
Remove 'k' type from redis_cmd_format_static

We'll need the post-prefixed key outside of the format
function, in order to properly calculate the cluster
slot, so obsuring it in this way isn't helpful.
Update redis_cmd_format_static with context

Further change to redis_cmd_format_static to take a RedisSock* object
every time.  This is because for virtually all commands there will be
at least a key (for which the RedisSock*) can provide our prefix,
and often a value (for which we can use RedisSock* to give us
serialization information.)
Remove TSRMLS_CC, and RedisSock from redis_cmd_format_static

Although it would remove code duplication, serialization and
key prefixing inside of redis_cmd_format static removes much
needed context that the cluster methods wlll require (e.g.
hashing the whole key, prefix included).
Fix typos
Initial commit of request/redirect/request logic

This is the initial draft of the logic we'll use in phpredis to
direct requests at a cluster, and then upon getting a moved or
ask response, try at the node delivered.
Initial commit of redis_commands.c

Given that non cluster and cluster based redis objects should act
exactly the same way (in terms of argument handling/processing)
we're extracting the parsing of arguments and command construction
from being directly inside of the PHP_METHOD itself.

This way, we don't repeat ourselves having two identical places
where we do this but in a slightly different way.

Every command takes a RedisSock pointer (coming from redis_sock_get
in a standard redis class, and cluster->flags in a cluster).

If we're passed a pointer for slot, we'll hash one of the keys
to return it's proper slot.
Protect library.h
Updated command processing logic.

Given that we're formalizing command builing functions such that they
are always in the form redis_cmdname_cmd, and that our response
processing functions always take the same arguments, our PHP_METHOD
bodies can be very generic.
Fix improper redis_cmd_format_static calls