Fix "can't bind to address" error reporting.

Report the actual port used for the listening attempt instead of
server.port.

Originally, Redis would just listen on server.port.
But, with clustering, Redis uses a Cluster Port too,
so we can't say server.port is always where we are listening.

If you tried to launch Redis with a too-high port number (any
port where Port+10000 > 65535), Redis would refuse to start, but
only print an error saying it can't connect to the Redis port.

This patch fixes much confusions.
Cluster: error out quicker if port is unusable

The default cluster control port is 10,000 ports higher than
the base Redis port.  If Redis is started on a too-high port,
Cluster can't start and everything will exit later anyway.
Bind source address for cluster communication

The first address specified as a bind parameter
(server.bindaddr[0]) gets used as the source IP
for cluster communication.

If no bind address is specified by the user, the
behavior is unchanged.

This patch allows multiple Redis Cluster instances
to communicate when running on the same interface
of the same host.
Fix key extraction for z{union,inter}store

The previous implementation wasn't taking into account
the storage key in position 1 being a requirement (it
was only counting the source keys in positions 3 to N).

Fixes antirez/redis#1581
Cluster: better timeout and retry time for failover.

When node-timeout is too small, in the order of a few milliseconds,
there is no way the voting process can terminate during that time, so we
set a lower limit for the failover timeout of two seconds.

The retry time is set to two times the failover timeout time, so it is
at least 4 seconds.
Merge pull request #1567 from mattsta/fix-cluster-join

Bind source address for cluster communication
Cluster: log error when anetTcpNonBlockBindConnect() fails.
Cluster: be explicit about passing NULL as bind addr for connect.

The code was already correct but it was using that bindaddr[0] is set to
NULL as a side effect of current implementation if no bind address is
configured. This is not guarnteed to hold true in the future.
Merge pull request #1555 from mattsta/cluster-port-error-out

Cluster port error out
Cluster: abort on port too high error.

It also fixes multi-line comment style to be consistent with the rest of
the code base.

Related to #1555.
Merge pull request #1586 from mattsta/fix-zunioninterstorekeys

Fix key extraction for z{union,inter}store
Cluster: some zunionInterGetKeys() comment trimmed.

Everything was pretty clear again from the initial statements.
Cluster: getKeysFromCommand() API cleaned up.

This API originated from the "diskstore" experiment, not for Redis
Cluster itself, so there were legacy/useless things trying to
differentiate between keys that are going to be overwritten and keys
that need to be fetched from disk (preloaded).

All useless with Cluster, so removed with the result of code
simplification.
Cluster: getKeysFromCommand() and related: top-comments added.
Cluster: evalGetKey() added for EVAL/EVALSHA.

Previously we used zunionInterGetKeys(), however after this function was
fixed to account for the destination key (not needed when the API was
designed for "diskstore") the two set of commands can no longer be served
by an unique keys-extraction function.
Cluster: getKeysFromCommand() top comment improved.
Fixed memory leak in SORT LIMIT option argument parsing on error.
Cluster: don't allow GET option in cluster mode.

The commit also refactors a bit the error handling during SORT option
parsing.
Cluster: evalGetKeys() fixed: was not setting keys count.
Cluster: SORT get keys helper implemented.