Stop spinning threads up for every connection

This changes DatTCP to be more efficient and not spin a thread up
for every connection. Instead it will spin up threads (to a
maximum) and leave them going to continue processing connections.
This is more efficient and keeps us from continually creating
threads. This, plus removing any 'serving' logging (even null
logging), made the server faster and smoother.

* The `WorkerPool` no longer 'processes' connections. It adds
  them to it's queue and signals any workers who are waiting.
* Workers are spawned and, if no connections are queued up, they
  become idle waiting. Once a connection is added, they will
  pick it up and serve it.
* If a connection is added and no worker is available to pick it
  up, then a new one will be spawned if the pool hasn't reached
  it's maximum allowed.
* Shutting down a pool will allow any connections that have been
  picked up by a worker to finish processing. Connections on the
  queue will not be served.
Seperated out mutexes for each resource

This breaks apart mutex usage for each resource that we are
locking. This creates a `Queue` and `Waiting` class that manage
their own mutexes. The final resource is the collection of
spawned workers, which the `WorkerPool` has a mutex for. This is
clearer about the intent of what resource we are locking and
waiting for.
Merge pull request #6 from redding/jcr-workers-updates

Stop spinning threads up for every connection