Thread-safe subprocesses

The `cork_subprocess` functions now work with multiple threads.  You can
also more easily run a single subprocess; you don't need to create a
one-element subprocess group any more.

The new implementation is also much simpler; before, we were using a
select loop in `cork_subprocess_wait` to sleep until there was something
interesting to do.  We also explicitly handled the `SIGCHLD` signal to
reap any processes that just finished.  We now use a more naive busy
loop; each call to `cork_subprocress_drain` tries to read data from the
subprocess's stdout and stderr streams, and then checks if the
subprocess has exited, both in a non-blocking fashion.  There is then a
busy loop in `cork_subprocess_wait` that drains the subprocess
repeatedly until it's finished.  We use the “hybrid yield strategy” from
[1] to make sure that we don't consume too much CPU if the subprocess
is long running and doesn't produce any output.

[1] http://www.1024cores.net/home/lock-free-algorithms/tricks/spinning