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.
Should we start with "go ia.allocateBlock()" instead, so the first call to Allocate doesn't necessarily have to wait? Or would that be too wasteful in cases where no IDs are needed?