Merge pull request #1870 from michael-grunder/object_arity

Fix OBJECT arity
RDB: load string objects directly as EMBSTR objects when possible.
PubSub clients refactoring and new PUBSUB flag.

The code tested many times if a client had active Pub/Sub subscriptions
by checking the length of a list and dictionary where the patterns and
channels are stored. This was substituted with a client flag called
REDIS_PUBSUB that is simpler to test for. Moreover in order to manage
this flag some code was refactored.

This commit is believed to have no effects in the behavior of the
server.
Variadic PING with support for Pub/Sub.

PING can now be called with an additional arugment, behaving exactly
like the ECHO command. PING can now also be called in Pub/Sub mode (with
one more more subscriptions to channels / patterns) in order to trigger
the delivery of an asynchronous pong message with the optional payload.

This fixes issue #420.
tryObjectEncoding(): use shared objects with maxmemory and non-LRU policy.

In order to make sure every object has its own private LRU counter, when
maxmemory is enabled tryObjectEncoding() does not use the pool of shared
integers. However when the policy is not LRU-based, it does not make
sense to do so, and it is much better to save memory using shared
integers.
PING: backward compatible error for wrong number of args.
Test: small integer sharing depends on maxmemory policy.
Test: Pub/Sub PING.
Cluster test: test that writes are retained during failovers.

In the test we use WAIT when the master and slave are up, and only later the
partition is created killing the master, so we are sure we don't incur
in failure modes that may lose writes in this test: the goal here is to
make sure that the elected slave was replicating correctly with the
master.
Merge branch 'unstable' of github.com:antirez/redis into unstable