Honor keepalive even when nothing has been received by client socket

This adds a little bit of overhead by using Unix domain sockets created
by `socketpair()`; instead of directly scheduling to each I/O thread's
epoll, the client file descriptor is written to one side of the socket
and read from within the thread.  This ensures the epoll is unblocked
in the I/O thread and proper care is taken to add that client to
control its lifetime.

For keep-alive connections, the overhead is non-existent. For close
connections, this will incur in two more syscalls (read() + write()
combo).  Two new file descriptors will be used per thread.  Maybe
there's a better way to implement this?

Closes #35.