Schema traversal updates

This change actually constructs the SchemaElement vector that Parquet
needs to represent the schema on disk, although I need to write tests.