Added segment list

The segment list manages the lifecycle of a segment.  Segments have a strict sequence of state
transitions that they must follow, and the segment list both manages the datastructures and storage
for the segments, and ensures that the segment state invariants are preserved.
Added storage manager

The storage manager uses the segment list and persistent counters to provide an abstraction for a
single queue datastructure that spans multiple segments.  This structure is durable and can recover
from a crash, with some loss of just written data that had not yet been confirmed as synced.