Experimenting with architecture and locks.

Currently I'm imagining some sort of dual queue with blocks being
shuffled from 'active' to 'committable' when they're full. If the active
queue gets too long, need to start forcing commits of not-full blocks. If
the committable queue gets too long, need to start blocking or delaying
writes. Three integers keep track of the indexes of the newest block,
oldest block, and newest committable block for this purpose.

Block size is arbitrary but has a 'commit' threshold. Underlying stream is
responsible for repartitioning our variously-sized blocks into whichever
chunk size the filesystem wants.

If profiling turns up GC thrash, we can reuse blocks.