add block handler to handle block files on different under file systems[Tachyon-33][SubTask 1]

details are on Tachyon's JIRA
BlockHandler is used to read and write block files on different under file systems, currently local file system is realized.
ByteBuffers are one more copy than transferTo.  Both are not copied into user space, so the network transfer is cheaper, but then the memory must be cleaned up.

ByteBuffers get cleaned up on java's GC.  When the object gets GCed, then the native memory also gets freeded.  As pointed out in the netty thread, this could be problematic since the network stack can allocate memory faster than it can free it (since we didn't do reference counting).

If there is an abstraction of BlockHandler, but you have to directly use BlockHandlerLocal, then we should remove BlockHandler since its not a abstraction that can be used.