Flesh out schema representation

This change fleshes out the schema representation for writing Parquet
files from C++.  Specifically, I:

- Have separate classes for data & container columns which can be
organized into a tree
- Provide a depth first traversal of this tree to create the vector
that the Parquet storage format needs to represent the schema

I also did a bunch of reorganization and commenting, updated build
instructions, and added Google Log calls to parts (which means you need
it to build).