EVAL/EVALSHA support

This PR ads support for `EVAL`/`EVALSHA`. Please note that this is a very early PR to get feedback as soon as possible. A lot of stuff needs to be done. I will add a bunch of questions inline.

## TODOs
 - [ ] Error handling for non-scalar values in lists
 - [ ] Uneven number of elements in a list that should be treated like a hash
 - [ ] Non-float value as a hash value
 - [ ] Error handling for null
 - [ ] README
 - [ ] Logging
Yep, I am not yet sure if it is better to have a method `boolean Command.requiresKey()` method or to move the whole validation into the command and deal with the code duplication somewhat differently.