Creating threads

The new `cork_thread` type provides a platform-neutral API for creating
and starting threads.  See the documentation for more details.
Fix alignment in cork_array on 32-bit platforms

On 32-bit platforms, our internal representation of a cork_array (which
doesn't depend on the types of the elements) wasn't aligned correctly
for all element types.  We can grab the pointer to the internal array in
a slightly different way, however, which works for all element types
regardless of alignment.
Fix expected hashes on big-endian 32-bit systems

The expected values in our hash value test cases were incorrect on
32-bit, big-endian systems (such as PowerPC).
Set errno properly while walking directories

The function `cork_walk_one_directory` now handles calls to `readdir`
properly be setting `errno` to zero before each call.  This is
necessary due to the ambigous way `readdir` uses NULL as a return
value.  A function may set `errno` to a non-zero value yet return
normally.  Since `readdir` depends on `errno` to indicate an error,
it needs to be reset prior to each call.
Merge branch 'feature/array-32bit' into develop

* feature/array-32bit:
  Fix alignment in cork_array on 32-bit platforms
Merge branch 'feature/hash-32bit' into develop

* feature/hash-32bit:
  Fix expected hashes on big-endian 32-bit systems
Merge branch 'feature/readdir-errno' into develop

* feature/readdir-errno:
  Set errno properly while walking directories
Capture exit codes from subprocesses

The functions for creating a new subprocess now accept an additional
`int *` parameter, which you can use to capture the exit code of the
subprocess.
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.
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