Add storage dir and  eviction strategy [TACHYON-33][SubTask 2 & 3]

details are on Tachyon's JIRA
https://tachyon.atlassian.net/browse/TACHYON-33
storage dir is the container which manages and stores the data on different storage tiers. it also maintains the data migration between different storage dirs(on same or different storage tiers).
if current storage tier has no enough space for new coming block, some blocks needs to be swapped out to its successor storage tier, to get enough space. Evict strategy defines how to choose the blocks to be evicted. currently LRU based eviction strategies are implemented. an interface is also exposed for other eviction strategy implementation
There is nothing in this interface that would allow that kind of support.  If you make the write path a channel and have transferTo support here, a local FS impl could use zero-copy where as other impls read on-heap in buffers.

There are 3 paths that I see for this class to support:

1) client side writing
2) transfer between levels
3) client/data server reading.

With the netty PR #333 I have zero-copy from disk to network.  If I use this interface, I would loose that.  

Also I plan to add a write path over network (remote client), so I will need to go from network to disk without copying.  Again, this interface won't support that.  This is problematic for me, since it means that the code can't be reused and the network layer has to reinvent this code base; I want only one way to work with blocks.