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.

Can we add a unit test writing an empty page, meaning that calling writePage/flushPage without calling the write method?