support schema evolution

This will add support for schema evolution.
When reading multiple files when the schema has changed, Parquet will merge all the schemas based on compatibility rules and expose the data as the union of those schemas.