SocketPair Fix

Added two missing POSIX-specific includes -- unistd.h and fcntl.h -- which were preventing socketpair.cpp from building on Linux.
Makefile Fix/Cleanup

Cleaned up and updated the linux Makefile.

Fixed a bug which was preventing automatic dependency generation from working properly.
Scope Guard

Added a ScopeGuard class, which simply wraps a functor and calls it when the object goes out of scope.

Added two overloads of a helper function template -- AtExit -- which deduce and wrap a functor, possibly with arguments forwarded through and bound into it (one of them is variadic, one of them is not -- the non-variadic one avoids the overhead of invoking std::bind).
Merge branch 'linux'
Recursive Mutex

Added the RecursiveMutex class.  This class implements the same interface as the Mutex class -- from RLeahyLib -- except it may be acquired recursively.
Client Cleanup

Cleaned up the client locking/atomic code.

The new code replaces multi-hundred line copy/paste code bloat with use of the RecursiveMutex class.

The new code replaces some try/catch spaghetti with use of the ScopeGuard class.

The new atomic implementation is much neater and more consistent.  It uses ~4 helper template functions rather than the ~10 that the old implementation used.  It itself is only one member template rather than 3 -- regardless of the number of sends to performed, a single, uniform API is consumed.  It doesn't use any external helper templates.

Removed the IsCallable class template.  It hasn't been used in quite a while, and I don't know why it was retained.

Removed the ContainsPacket class template.  It's not used in the new and much improved Client::Atomic implementation.