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.