Re-organize DatTCP's API methods for more control

This modifies DatTCP's API methods to allow more control of the
server.

* Added `pause` for stopping the server's work loop but still
  leaving the TCP connection open (so requests can queue up).
* Added `halt` for a non-graceful stopping of the server.
* Renamed `start` to `run` to line up with the `running?` state.
* `run` returns the thread it creates. This can then be joined,
  so the method `join_thread` is no longer needed. I prefered
  how this reads and it's one less method to support.
* Broke up the pieces of 'shutting down the server'. This is to
  support the different ways of shutting down (`pause`, `stop` and
  `halt`).
* Renamed `Workers` to `WorkerPool`. This is a clearer name for the
  purpose of the class.
* Modified `WorkerPool` to take a serve proc when it's created
  instead of everytime we accept a connection. I felt this was
  cleaner and slightly more efficient not having to create a new
  proc for every connection.