PARQUET-117: implement the new page format for Parquet 2.0

The new page format was defined some time ago:
https://github.com/Parquet/parquet-format/pull/64
https://github.com/Parquet/parquet-format/issues/44
The goals are the following:
 - cut pages on record boundaries to facilitate skipping pages in predicate poush down
 - read rl and dl independently of data
 - optionally not compress data

The build does not pass yet because of the semver enforcement but tests pass.
I need to clarify what is part of semver and what is not.

The reader always expects an empty page when the column is empty.
Because it will not be actually empty but encode that many nulls with the appropriate number of zeros for the definition level. This will take a few bytes as it gets encoded with RLE.