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.
Abstract hllSparseAdd() / hllDenseAdd() via hllAdd().
Fix seqlen computation in hllSparseAdd().
Fix hllSparseAdd() new sequence replacement when next is NULL.

sdsIncrLen() must be called anyway even if we are replacing the last
oppcode of the sparse representation.
hllSparseAdd() sanity check for span != 0 added.
hllSparseToDense API changed to take ref to object.

The new API takes directly the object doing everything needed to
turn it into a dense representation, including setting the new
representation as object->ptr.