redod: Skeleton for redo change daemon

Apenwarr had a good idea to have a central process do all the building
and let the redo commands be extremely light-weight binaries to issue
commands to the master process.

redod is a placeholder for an implementation of that process in go. The
redo commands will be in C.
redocli: Redo driver client

Connects to the daemon and sends its invoke parameters on. Will try
launching the daemon if there is no connection.
Build and run redocli and redod

Modify all.do to demand the binaries then run them as a smoke test.
Improve logging output of redod

Give each function a logger with an appropriate prefix.
redod: Close the listener on exit
Split redod into 6 short files.
Consolidate reaping code
Factor handling in to a pipeline

Convert the loop in to communicating goroutines. One reads requests from
the connection, one fulfills the request and passes on the response, and
finally one to send the response.
Split fulfill in to its own file
Factor out fulfill_one
handle: support multiple messages
Split redocli in to 3 files
Split request into its own file
Factor main
Add automatic dependency analysis for Go programs
Switch to socketpair instead of binding

Instead of binding a Unix socket and having the client connect, simply
create a socketpair in the client and launch the daemon.

This removes all the need for ugly fd-based synchronization.
Factor out common code into a util package
Add symlinks in bin to redocli
Move the request structure to util
Move shell discovery to bin/sh.do, fix testing

Move the old shell discovery logic in to bin/sh.do which generates a
symlink to the best shell.

Revert all.do back to master, and update _all.do to build the daemon,
cli, and sh symlink.

Modify test.do to run the redo implementation built locally.