LASTSAVE is a "random" command.
Make all WATCHers dirty when the slave reloads the DB.
Add SO_KEEPALIVE support to anet.c.
Set SO_KEEPALIVE on client sockets if configured to do so.
tcp-keepalive option documented in redis.conf.
Tcp keep-alive: send three probes before detectin an error.

Otherwise we end with less reliable connections because it's too easy
that a single packet gets lost.
Format to fit 80 columns

This makes it readable on GitHub and editors without auto wrapping.
TCP keep-alive. Better documentation in redis.conf.
Makefile: valgrind target added (forces -O0 and libc malloc).
Merge pull request #941 from svnpenn/patch-1

Format to fit 80 columns
Emit SELECT to slaves in a centralized way.

Before this commit every Redis slave had its own selected database ID
state. This was not actually useful as the emitted stream of commands
is identical for all the slaves.

Now the the currently selected database is a global state that is set to
-1 when a new slave is attached, in order to force the SELECT command to
be re-emitted for all the slaves.

This change is useful in order to implement replication partial
resynchronization in the future, as makes sure that the stream of
commands received by slaves, including SELECT commands, are exactly the
same for every slave connected, at any time.

In this way we could have a global offset that can identify a specific
piece of the master -> slaves stream of commands.
Use replicationFeedSlaves() to send PING to slaves.

A Redis master sends PING commands to slaves from time to time: doing
this ensures that even if absence of writes, the master->slave channel
remains active and the slave can feel the master presence, instead of
closing the connection for timeout.

This commit changes the way PINGs are sent to slaves in order to use the
standard interface used to replicate all the other commands, that is,
the function replicationFeedSlaves().

With this change the stream of commands sent to every slave is exactly
the same regardless of their exact state (Transferring RDB for first
synchronization or slave already online). With the previous
implementation the PING was only sent to online slaves, with the result
that the output stream from master to slaves was not identical for all
the slaves: this is a problem if we want to implement partial resyncs in
the future using a global replication stream offset.

TL;DR: this commit should not change the behaviour in practical terms,
but is just something in preparation for partial resynchronization
support.
Use the new unified protocol to send SELECT to slaves.

SELECT was still transmitted to slaves using the inline protocol, that
is conceived mostly for humans to type into telnet sessions, and is
notably not understood by redis-cli --slave.

Now the new protocol is used instead.
PSYNC: work in progress, preview #2, rebased to unstable.
After SLAVEOF <newslave> don't allow chained slaves to PSYNC.
Log the unexpected string received in place of the SYNC payload length.
SYNC not allowed with pending data on the static output buffer.
PSYNC: don't use the client buffer to send +CONTINUE and +FULLRESYNC.

When we are preparing an handshake with the slave we can't touch the
connection buffer as it'll be used to accumulate differences between
the sent RDB file and what arrives next from clients.

So in short we can't use addReply() family functions.

However we just use write(2) because we know that the socket buffer is
empty, since a prerequisite for SYNC to work is that the static buffer
and the output list are empty, and in general it is not expected that a
client SYNCs after doing some heavy I/O with the master.

However a short write connection is explicitly handled to avoid
fragility (we simply close the connection and the slave will retry).
Remove harmless warning in slaveTryPartialResynchronization().
PSYNC: debugging printf() calls are now logs at DEBUG level.