[2.2] Counts Store refactor to be based on a generic KV-Store

CountsStore is backed by a generic KV-Store which stores key and value of 16 bytes each.

The encoding of the keys and values have changed to match the new back-end. In particular the key encoding contains a byte which specifies the type of the entry. This will simplify the introduction of new keys for new counts.

Revert the caching on read in ConcurrentTrackerState since the underlying PageCache does the caching and we have potentially less work to do when merging in-memory state and values in the store.

More test coverage and fix a bug in the binary search when reading entries ordered by key.

When visiting records we return a boolean to notice when we encounter an empty record and so stop reading.

Increased usage of registers rather than passing around longs.