PARQUET-90: integrate field ids in schema

This integrates support for field is that was introduced in Parquet format.
Thrift and Protobufs ids will now be saved in the Parquet schema.

I'm not sure about adding builder-like methods here. I introduced the Types builders that will do validation while the types are being built, while adding a similar way of making Types. Those builders guarantee that if you get a GroupType or PrimitiveType, it is valid for all known rules (like UTF8 annotates BINARY). Could this functionality be migrated to the Types API instead? I think that would be cleaner.

Also, I had a PR against the old repository to move to the new Types API so we can deprecate *all* of the constructors here. I think we should get that in so we can clearly define what the API is for building types. I'm happy to rebase it if you think that's a good direction to go.