Use self-pipe trick for stopping, halting and pausing

This switches the server's work loop to `IO.select` a pipe along
with the `TCPServer`. The pipe is used to "wakeup" the work loop
so that it can exit. This allows removing the timeout that was
passed to `IO.select` and makes the server immediately responsive
to signals. When trapping signals, the `stop`, `halt` or `pause`
methods should be called. These will write to the pipe and exit.
This wakes up the work loop. It will then read from the pipe and
set it's signal appropriately. This also makes calling the
command methods safe in signal blocks (as long as you don't wait
for the server to shutdown).

Closes #17