Renew slots when MOVED occured during request to Cluster

* It's suggested by http://redis.io/topics/cluster-spec
** antirez/redis-rb-cluster implementation does it, too
* Since Redis 3.0-beta 7 introduces CLUSTER SLOTS, it becomes easier
* FIXME: It's fully synchronized, so it hurts performance (somewhat poor implementation)
** We can try Reader / Writer strategy to make lock waiting make shorter
Replace synchronized keyword lock to ReaderWriterLock
Re-format source to respect Jedis convention
Race condition when switching masters in JedisSentinelPool

Instead of recreating GenericObjectPool, we change the
underlying factory destination host. When returning
objects to the pool we make sure they are pointing at
the correct master.
Add an extra sentinel server to tests

Adds an extra sentinel server monitoring the mymaster failover cluster,
makes the tests more interesting.
Fix race condition in JedisSentinelPoolTest

The test was issuing the failover command and only afterwards
connecting to the pub-sub channel to receive failover notifications.
If the failover occurred fast enought the pub-sub listener would never
get the notification.

Run the failover command on a separate Jedis connection after we're
absolutely sure that we're subscribed to the pub-sub channel.
Add check that JedisSentinelPool accepts closing connections before and after failover
Proper master failover detection depends on testOnBorrow
Let the user choose whether to testOnBorrow or testOnReturn

Force testOnBorrow if neither is specified.
Properly close jedis connection in case of exceptions
Add second jedis connection to waitForNewPromotedMaster call
Do master failover detection in JedisSentielPool.getResource
Add Closeable to JedisPool.

This allows JedisPool instances to also participate in try-with-resources.

Adds tests (both for JedisPool and the Jedis code itself).
Add "closeable" unit tests to JedisSentinelPool, ShardedJedisPoolTest
Replace Closer class to use its close() method
Support Sorted Set with LEX commands

* new commands : ZLEXCOUNT, ZRANGEBYLEX, ZREMRANGEBYLEX
** added commands to Jedis, ShardedJedis, JedisCluster, PipelineBase with Binary
/ Normal(String)
** description links
*** http://redis.io/commands/zlexcount
*** http://redis.io/commands/zrangebylex
*** http://redis.io/commands/zremrangebylex
** Unit test included

Conflicts:
	src/main/java/redis/clients/jedis/BinaryShardedJedis.java
	src/main/java/redis/clients/jedis/Jedis.java
	src/main/java/redis/clients/jedis/JedisCluster.java
	src/main/java/redis/clients/jedis/Protocol.java
	src/main/java/redis/clients/jedis/ShardedJedis.java
	src/test/java/redis/clients/jedis/tests/commands/SortedSetCommandsTest.java
Remove unused (by accident?) import
Make it better to use URI from Jedis / JedisPool

* no need to provide password / DB index when user uses URI
* can provide timeout when user users URI
JedisURIHelper.getDBIndex() now returns 0 when db index is not provided
add timeout parameter to blpop/brpop