Subprocess environments

This patch adds a new `cork_env` type for holding lists of environment
variables, along with a handful of functions for managing an environment
list.  In particular, there are functions to create a new `cork_env`
instance from the process's current environment list, as obtained via
the standard `getenv(3)` function.

The functions for executing subprocesses now take in an optional
`cork_env` parameter.  If given, we replace the subprocess's environment
with the contents of the `cork_env` instance before executing the
subprocess's body.  If you pass in a NULL environment, we reuse the
environment list of the calling process.