Allow arbitrarily long chains of processes

Decode messages as they arrive from the port. Non-matching messages are
converted to tuples and sent back into the process' mailbox.

A busy port that is generating many messages (stdout, signals, stderr)
could cause a call to timeout. Still messy, cleanup required.
Check child status when control fd is closed

If the child exits because of an error condition, the parent would
respond with "ok".