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

not a priority, but this looks a little bit convoluted. Maybe convert magicBuf to bytes and compare to MAGIC instead of the other way around? It seems that would be shorter.