Merge branch 'release/0.10.0' into develop

* release/0.10.0:
  Bump soversion for 0.10.0
Set library version correctly

We were using SOVERSION to set the full build version of our shared
libraries.  SOVERSION should only contain the first number of the build
version triple.  The VERSION property is what should contain the
library's full build version.  Also, the CMake build file now includes a
description of when and how to update the library version.  (It
*shouldn't* match the package's release version.)
Don't use GLOB to detect library source files
Better CMake 2.6 support

I guess the default output directory for configure_file in 2.6 is the
root, not the current binary directory.
Merge remote-tracking branch 'template/c-template' into develop

* template/c-template:
  Better CMake 2.6 support
  Don't use GLOB to detect library source files
  Set library version correctly
Initializer functions

This patch adds a new `CORK_INITIALIZER` macro, which you can use to
declare a function that should be automatically executed at program
startup time.  Right now we only implement this macro on GCC, using the
`constructor` function attribute.
Symbol visibility macros

This patch adds the new `CORK_EXPORT`, `CORK_IMPORT`, and `CORK_LOCAL`
macros, which can be used to declare the visibility of each function in
a library.  There is also documentation describing how to use these
macros; you usually won't use `CORK_EXPORT` and `CORK_IMPORT` directly,
but instead use them to define a `FOO_API` macro for your library.

Our “embedded” copy of libcork, which we statically link with each of
our test case programs, defines `CORK_API` to be `CORK_LOCAL`, which
seems to let the compiler apply a couple of extra optimizations.  (The
linked programs are all smaller.)
Merge branch 'feature/initializer' into develop

* feature/initializer:
  Initializer functions
Process cleanup functions

You can now register functions that will be automatically called when
the current process exits, similar to the standard `atexit(3)` function.
Our version differs in that you must provide a priority value for each
function, allowing you to explicitly define the order in which the
cleanup functions should be called.
Initialize cleanup function list at compile time

Before, we used a `CORK_INITIALIZER` function to initialize the linked
list of cleanup functions.  However, this means that you can't register
cleanup functions inside of other `CORK_INITIALIZER` functions, since
there's no guarantee what order they'll be called in.  Instead, we use a
static initializer to make sure the cleanup list is ready to go before
any `CORK_INITIALIZER` functions are executed.
Merge branch 'feature/atexit' into develop

* feature/atexit:
  Initialize cleanup function list at compile time
  Process cleanup functions
Fix add_test() to work with cmake 2.6

This patch makes the usage of add_test() in tests/CMakeLists.txt
backwards compatible with cmake 2.6.  Of note, we have to ensure
the current working directory is CMAKE_BINARY_DIR before running
the cram test cases.  We can do this within add_test() with prefix
command to ccram.
Fix strict aliasing breakage in hash functions

For now, we're getting around the problem using GCC's `__may_alias__`
attribute, which turns off strict aliasing checks (and optimizations)
for a single type.  We might eventually need to find a more robust
solution.
Fix tests/ccram to use POSIX string equality operator

This patch updates tests/ccram to compare strings using `=`, which is
POSIX sh compliant.
Merge branch 'feature/posix-sh' into c-template

* feature/posix-sh:
  Fix tests/ccram to use POSIX string equality operator
Merge remote-tracking branch 'template/c-template' into develop

* template/c-template:
  Fix tests/ccram to use POSIX string equality operator
  Fix add_test() to work with cmake 2.6
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.