Set up the build system and implemented config management and logging.

The build system uses CMake to automatically generate dependencies. It
also automatically finds all files since all of the necessary files are
already created. This circumvents a nasty limitation of CMake that would
occur if new files needed to be added later in the program.