libhookgetenv: Write function name to pipe.

Allows easy extension to wrapping other functions.
libhookgetenv: Fix: Don't call getenv in init.

What kind of lunacy was this? In `init` we recursed into `getenv` which was
certainly unintended.
Separate spipe.

This will be necessary for receiving from the getenv hook.
libhookgetenv: Flock the backchannel pipe.

This should account for multiple child processes attempting to communicate to
the parent via the same pipe.
Introduce ability to poll the spipe to see whether we can read from it.

Necessary for implementing a reader with the communication protocol.
Backed out changeset e65e5d3bf62f
Backout fde95c1fb6d5
Don't generate dep files when cleaning.
Implement reading from the hook pipe.
Always make the caller allocate dict keys.