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

The duplicate will not copy the buffer, it only create another BB with its own offset and share the content with previous. Otherwise the reading a inputstream will effect other place using the same in.