Using Zero-Copy API to read

Replace all the byte array based API with Byte Buffer based API in the reading path to avoid byte array copy.
1.Introduce a Compatible layer to keep compatible with old Hadoop API
2.Make the whole read path use ByteBuffer directly

Parquet does not need to depend on any hadoop code for having ByteBuffer based compression/decompression.
We can change how compression and decompression work:
https://github.com/apache/incubator-parquet-mr/blob/f284238631cb1026b4977f6f0b7ef342260d35c5/parquet-hadoop/src/main/java/parquet/hadoop/CodecFactory.java#L97
https://github.com/apache/incubator-parquet-mr/blob/f284238631cb1026b4977f6f0b7ef342260d35c5/parquet-hadoop/src/main/java/parquet/hadoop/CodecFactory.java#L53
In particular, right now we are using the hadoop CompressionCodec API but we don't need to.
We could limit integration to the snappy codec for now.