Clean up replicate_server.

Now it is restartable without having to use pkill or dig through your system monitor.
i should have done this immediately.
Debugging why unregister() doesn't get called when clients leave.

forkit.py demonstrates that socat does indeed shut down EXEC processes
when the socket dies (tested with both TCP and Unix Domain). So something about
replicate.py is holding it open idenfinitely. In fact, replicate.py can outlive socat.

I could rewrite replicate.py as a socket app itself, and in it select() on both the input socket and the output socket, but that's a lot of work and it might not even be the proper bug.
Salvage socat's habit of leaving replicate.py's around.

Figuring out how to get around this took a long time,
and my solution is not as elegant as I would like.
It came down to miusing a socketpair() like a Unix signal or a
 because our spoolers block at select() already,
 but I wanted to have them stop blocking until input OR a "signal" comes,
 so I needed to use something that had a file descriptor behind it.
I also now spin off subsidary threads simply because I wanted to block on two totally separate file descriptors in parallel and I could either rewrite my select() loops to be one single loop--which breaks encapsulation and just feels messy--or do this, which also feels messy but at least maintains encapsulation.