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.
Port libcork to FreeBSD

This patch should work for any 4.3 Net2 code base or newer, but we
are only testing on FreeBSD.