restructure the server so it is more likely to work

The primary change here is to switch to a pre-forking model.

* The master starts up and binds the socket
* children are forked
* each of the children wait on accept() for activity

The client now more correctly manages connections to the server
processes

* a small number of connections are established in advance of
  sending data
* as data is sent if there is more data to send new connections
  are made
* when making connections if no server is able to accept back
  off for a few milliseconds

This puts in the state of "fairly normal unix socket server"
except for the select loop in the client.

Now to see if the effort is worthwhile. No clear evidence yet
that it will be.