Update lettuce to 3.x

* Update lettuce redis client to latest snapshot, adopt changed API and use API for commands which were emulated using LUA script
* Implement Sentinel support using lettuce library, adopt finer grained exceptions and aligned exception behavior to match other libraries
* Added shutdown-timeout property in order to control shutdown duration of the netty framework which reduces test run duration
* Documentation updated
* Contains also a fix to use psetex instead of setex (typo)
* Switched `MinimumRedisVersionRule` to Jedis since Jedis has a much faster shutdown behavior than lettuce

Reference: DATAREDIS-348
I took a look again since the code was confusing. `await(...)` is called only in regular mode (`pipeline=false` and `queuing=false`). This means `isMulti` is in `await(...)` always `false`. 

Another issue that I noticed is:

Issuing `MULTI` via exec on a regular connection (`connection.execute("MULTI")`) with `await(...)` will return an empty `List`. All following commands will be triggered within the `MULTI` on Redis but won't provide a result on the final `EXEC`. This is because lettuce queues all `MULTI`-related outputs in an internal
`MultiOutput`. The `MultiOutput` in case of a `EXEC` using `execute(...)` is empty and has no definition about the data structures that come back.

So coming back to `await(...)` it means that the `if`-clause can be removed safely. 

Does it make sense?