Merge hierarchy store into Tachyon [TACHYON-33 sub-task 5 & 6]

Merge hierarchy store into Tachyon, which supports storing data on both memory and other storage(SSD HDD etc), client side and RPC interface are also modified accordingly

JIRA:
https://tachyon.atlassian.net/browse/TACHYON-38
https://tachyon.atlassian.net/browse/TACHYON-39
"the worker does know where the block is, but it has to do the lookup job by querying StorageDirs one by one. "

It doesn't need to. The worker can store this information in memory so lookup is O(1).  This will make tired storage run at the speed of the storage reading from, not at the lookup cost or the cost of consistency. 

"in current implementation, the client just pass the location information from master to worker, and worker just uses the information as cache info"

But why would we want to do this? It only makes this feature more complex but doesn't offer any gains. I have asked about this multiple times and I have yet to hear any benefit for doing things this way.  Can you explain why this is good? What do we gain by doing this? 

"because the location information may be invalid: the block may be evicted and location change is not synchronized to master yet. so worker first find the block from the location gotten from client, if it can't find the block, then do the lookup job."

This is super limiting though. It makes any optimizations in the future impossible since every single component written in every single language must agree. I have stated why I feel that this is not good, and have stated ways to make it so this whole thing can be done in the worker at O(1) time in the worst-case.  Can you explain why the approach taken in this patch is better?

"based on out testing, for most of the time(we can say 99.9%) the information on master is valid which helps worker avoid querying StorageDir one by one."

Can you explain your use-cases that make up this 99.9%?  When you run with very limited space on a shared system (MapReduce with other things on the node), or your focus is a Database running on the system (Tachyon as a cache layer for this) there will be many times where the consistency will effect latencies.  Seeing how we want databases to leverage tachyon as a cacheing system, these kind of latency hiccups are non-starters for us.