tryObjectEncoding() refactoring.

We also avoid to re-create an object that is already in EMBSTR encoding.
PFCOUNT: always unshare/decode the object.

This will be a non-op most of the times since the object will be
unshared / decoded, however it is more technically correct to start this
way since the object may be decoded even in the read-only code path.
ZRANGEBYLEX and ZREVRANGEBYLEX implementation.
Fix eval usage in tests to conform with eval semantics
Add casting to match printf format.

adjustOpenFilesLimit() and clusterUpdateSlotsWithConfig() that were
assuming uint64_t is the same as unsigned long long, which is true
probably for all the systems out there that we target, but still GCC
emitted a warning since technically they are two different types.
HyperLogLog sparse representation description and macros.
HyperLogLog sparse representation slightly modified.

After running a few simulations with different alternative encodings,
it was found that the VAL opcode performs better using 5 bits for the
value and 2 bits for the run length, at least for cardinalities in the
range of interest.
Check key expiration before deleting

Deleting an expired key should return 0, not success.

Fixes #1648
Add test for deleting an expired key

Verify proper expire-before-delete behavior.

This test passes with the expire-before-delete commit and fails
without it.
HyperLogLog refactoring to support different encodings.

Metadata are now placed at the start of the representation as an header.
There is a proper structure to access the representation.
Still work to do in order to truly abstract the implementation from the
representation, commands still work assuming dense representation.
hllAdd() refactored into two functions.

Also dense representation access macro renamed accordingly.
hllCount() refactored to support multiple representations.
HyperLogLog sparse representation initial implementation.

Code never tested, but the basic layout is shaped in this commit.
Also missing:

1) Sparse -> Dense conversion function.
2) New HLL object creation using the sparse representation.
3) Implementation of PFMERGE for the sparse representation.
HyperLogLog sparse to dense conversion function.
Create HyperLogLog objects with sparse encoding.
Fix HLL sparse object creation.

The function didn't considered the fact that each XZERO opcode is
two bytes.
Increment pointer while iterating sparse HLL object.
Fix HLL sparse object creation #2.

Two vars initialized to wrong values in createHLLObject().
Macro HLL_SPARSE_XZERO_LEN fixed.
hllSparseSum(): multiply 1 * runlen for zero entries.