Refactor storage dir

I propose that we make `StorageDir` the entry point and drop `BlockHandler`.  The core reasons for this are that:

`BlockHandler` is the same thing as java's `Channel`.  Easier to use one std convention than create a new one.
`StorageDir` is the main entry point anyways, since the path is relative to the tier, so `BlockHandler` can't be the gateway since it's path depends on the `StorageDir`.
Tiered Storage will involve in remote read. we agree that client side doesn't touch tiered storage, because all data access on client side may comes from loopback interface or network.

and current implementation returns a ByteBuffer which can be a DirectByteBuffer.