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

Sunyu, unfortunately, [HADOOP-8148](https://issues.apache.org/jira/browse/HADOOP-8148) that I mentioned in my original pull request is not finished/committed yet. Even worse it seems abandoned at the moment. With this API, we should be able to channel data via compressor/decompressor without generating byte array copies in them.  If the posted patch works for at least for one codec it already suffices for our purpose. We can tackle the rest with the hadoop community later.