Start fleshing out a network buffer representation.

The eventual aim is to allow multiple underlying "things" to potentially
represent network buffers and the network IO code can choose an efficient
way to spray it out to the network.

For now comm_write() uses the network buffer directly.  Later on I'll
change it to take an iovec style array of these things so multiple
writes can be thrown together.
Use two threads for now.  16 is a bit much.
Flesh out enough to allocate a single shared memory segment and do
naive allocations.

It's not enough to actually use - as the allocation itself needs
more information: it needs the FD and the offset inside the allocation.
Otherwise we can't use it for sendfile().
Create a new thing that represents a shm allocation.

This includes enough information to use it as both a data buffer
and a sendfile() source.
Use the new shmalloc API.
Use sendfile() if the underlying source buffer comes from a posix shared
memory segment.
* Disable the random open/close for now; this fails and will fail
  until the shared memory allocator works with frees.

* Initialise the shm allocator!