Created new block ID allocator & put it into use.

Created ID allocator which intelligently allocates blocks of IDs
and refreshes them automatically at the halfway-through point.

Moved Store to use new ID allocators for Raft IDs and Range IDs.
Split up Store.CreateRange into methods for getting a BootstrapRangeMetadata
and creating a RangeMetadata using a replicas slice and range key intervals
which allocates IDs and populates the metadata as necessary. This will be
used from the range split code.
This should probably be `1.5 * blockSize + 1` to avoid unnecessarily blocking the allocating goroutine (for very large block sizes it might be advantageous to limit the channel capacity, since blocking the goroutine would be cheaper than a very large channel, but for the sizes we're using it's better to never block)