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.
User-defined switch point between sparse-dense HLL encodings.
PFDEBUG TODENSE added.

Converts HyperLogLogs from sparse to dense. Used for testing.
HyperLogLog invalid representation error code set to INVALIDOBJ.
More HyperLogLog tests.
ZLEXCOUNT implemented.

Like ZCOUNT for lexicographical ranges.
Pass by pointer and release of lex ranges.

Given that the code was written with a 2 years pause... something
strange happened in the middle. So there was no function to free a
lex range min/max objects, and in some places the range was passed by
value.
Basic ZRANGEBYLEX / ZLEXCOUNT tests.
Sorted set lex ranges stress tester.
ZREMRANGE* commands refactored into a single generic function.
Always pass sorted set range objects by reference.
ZREMRANGEBYLEX implemented.
HyperLogLog low level merge extracted from PFMERGE.
PFCOUNT support for multi-key union.
Speedup SUM(2^-reg[m]) in HyperLogLog computation.

When the register is set to zero, we need to add 2^-0 to E, which is 1,
but it is faster to just add 'ez' at the end, which is the number of
registers set to zero, a value we need to compute anyway.
Speedup hllRawSum() processing 8 bytes per iteration.

The internal HLL raw encoding used by PFCOUNT when merging multiple keys
is aligned to 8 bits (1 byte per register) so we can exploit this to
improve performances by processing multiple bytes per iteration.

In benchmarks the new code was several times faster with HLLs with many
registers set to zero, while no slowdown was observed with populated
HLLs.
PFCOUNT multi-key test added.
ZREMRANGEBYLEX memory leak removed calling zslFreeLexRange().
Fuzzy test for ZREMRANGEBYLEX added.