Transactions: use discardTransaction() in EXEC implementation.
Transactions: propagate MULTI/EXEC only when needed.

MULTI/EXEC is now propagated to the AOF / Slaves only once we encounter
the first command that is not a read-only one inside the transaction.

The old behavior was to always propagate an empty MULTI/EXEC block when
the transaction was composed just of read only commands, or even
completely empty. This created two problems:

1) It's a bandwidth waste in the replication link and a space waste
   inside the AOF file.

2) We used to always increment server.dirty to force the propagation of
   the EXEC command, resulting into triggering RDB saves more often
   than needed.

Note: even read-only commands may also trigger writes that will be
propagated, when we access a key that is found expired and Redis will
synthesize a DEL operation. However there is no need for this to stay
inside the transaction itself, but only to be ordered.

So for instance something like:

    MULTI
    GET foo
    SET key zap
    EXEC

May be propagated into:

    DEL foo
    MULTI
    SET key zap
    EXEC

While the DEL is outside the transaction, the commands are delivered in
the right order and it is not possible for other commands to be inserted
between DEL and MULTI.
Flag PUBLISH as read-only in the command table.
TTL / PTTL commands: two bugs fixed.

This commit fixes two corner cases for the TTL command.

1) When the key was already logically expired (expire time older
than current time) the command returned -1 instead of -2.

2) When the key was existing and the expire was found to be exactly 0
(the key was just about to expire), the command reported -1 (that is, no
expire) instead of a TTL of zero (that is, about to expire).
Allow SELECT while loading the DB.

Fixes issue #1024.
redis-trib: ClusterNode #info_string output modified.

The hope is that the new one is more readable.
Test: new functions to capture and analyze the replication stream.
Test: Restore DB back to 9 after testing MULTI/EXEC with DB 5.
Test: test replication of MULTI/EXEC.
DEBUG set-active-expire added.

We need the ability to disable the activeExpireCycle() (active
expired key collection) call for testing purposes.
Test: verify that lazy-expire works.
Better DEBUG error message when num of arguments is wrong.
Test: regression test for issue #1026.
EXPIRE should not resurrect keys. Issue #1026.
Extended SET command implemented (issue #931).
Test: Extended SET tests.
Support for case unsensitive SET options.
Merge pull request #1017 from jbergstroem/build-improvements

Build improvements
Version bumped to 2.9.9.
Throttle BGSAVE attempt on saving error.

When a BGSAVE fails, Redis used to flood itself trying to BGSAVE at
every next cron call, that is either 10 or 100 times per second
depending on configuration and server version.

This commit does not allow a new automatic BGSAVE attempt to be
performed before a few seconds delay (currently 5).

This avoids both the auto-flood problem and filling the disk with
logs at a serious rate.

The five seconds limit, considering a log entry of 200 bytes, will use
less than 4 MB of disk space per day that is reasonable, the sysadmin
should notice before of catastrofic events especially since by default
Redis will stop serving write queries after the first failed BGSAVE.

This fixes issue #849