clearenv replacement on Mac OS X and BSDs

Mac OS X, FreeBSD, OpenBSD, and NetBSD don't provide the `clearenv(3)`
function, which we were using to clear out the current environment
before replacing it with the contents of a `cork_env` instance.  This
patch adds replacement implementations on these platforms.  On the BSDs,
the replacement is simple; we just assign an empty array into the
`extern` variable.  On Mac OS X, however, we don't have access to
`environ` in a shared library, and must use a helper function to get the
pointer to the environment array [1].

Note that there are several other platforms that also don't provide
`clearenv(3)` (see a full list at [2]).  At some point, we'll want to
expand our preprocessor checks to provide the replacement implementation
on those platforms, too.  But I don't have instances of those platforms
to test on, so I'm leaving them out for now.

[1] http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/environ.7.html
[2] http://www.gnu.org/software/gnulib/manual/html_node/clearenv.html
Change working directory before exec

You can now change the working directory that a program will be executed
in.  Instead of adding more parameters to the cork_subprocess_new_exec
function, we now have a separate cork_exec type.  Its constructor takes
in the `program` and `params` parameters.  You must set any other
properties by calling setting functions.  You can execute the cork_exec
program directly in the current process by calling the cork_exec
function.  Like the `exec(3)` family of functions, cork_exec never
returns (unless there's an error starting the program).  The
cork_subprocess_new_exec function translates the cork_exec instance into
a cork_subprocess, which will start the program in a separate
subprocess.