NewAllocator creates a new ID allocator which increments the specified key in
allocation blocks of size blockSize. If the key exists, it's assumed to have
an int value (and it needs to be positive since id 0 is a sentinel used
internally by the allocator that can't be generated). The first value
returned is the existing value + 1, or 1 if the key did not previously exist.