constructor(options) {
        this.hashingAlgorithm = KeyValueDeduplicationCache.determineHashAlgorithm();

        this.clear();
    }
This thing keeps track of key/value pairs to find out if they've changed.

Instead of storing the whole payload, we'll just store a hash to save memory
The hashing algorithm is determined based on the hardware we're running on as benchmarks have shown
that performance may vary greatly based on cpu architecture

Strings in JS are UTF-16 take up 2 byte per character, which ends up as 80 bytes for sha1 and 64 for md5
Numbers in JS however will always just take up 8 bytes so instead of saving the hash in hex or base64,
we take as much of the hashes a JS number can safely fit and store that. This enables us to greatly reduce
the likelihood of collisions without having to use more memory

As JS numbers are IEEE-754 doubles, we may safely use up to 2^52-1 without any precision loss
0xfffffffffffff (13x f) is exactly that 2^52-1
Thus, we just take the first 13 characters of the hash digest in hex, parse that as int, and we're good.

Thanks to Raman Shishniou for this idea!


@param {object} options