Add some basic multiplatform support and support for Mac OS X.

There were some important changes that needed to be made in order
to support these platforms.

1. Some versions of CMake are not compiled with HTTPS support in
   libcurl, so we need to fetch gmock by HTTP.
2. Newer versions of gmock have moved StringMatchResultListener
   out of the ::testing::internal namespace. Depending on this was
   bad anyways, and it was trivial to re-implement inside the
   source tree.
3. environ, pipe2 and others cannot be used on Darwin. A platform
   abstraction for slightly divergent versions of sysv unix was
   added in order to handle some of these differences and take
   advantage of features on platforms that support certain
   functionality (like O_CLOEXEC).
4. Valgrind is not supported on all operating systems. As such, we
   cannot depend on Valgrind. This means that the list of tools
   that yiqi can use needs to be autogenerated at built-time.
5. General source code cleanups where warranted (80-character lines,
   spaces between identifiers and brackets, etc).
6. Some of the build process assumes that gtest/gtest.h was in the
   system include path, but this isn't true on platforms where
   gtest needs to be downloaded and built locally.