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
1. the input storageDirId is from master, which may not be updated in time. worker just use it as cached info, if worker fails to lock the block in that storage dir, which means that the block is evicted, but the location info is not synchronized with master yet. then worker will look up the block in all storage dirs, if block is found,  lock block and return the storage dir id, update/synchronize is not necessary, because the location information will be updated in heartbeat with master.
2. one block may be locked more than one time, the blockLockId is used to identify different lock OP on same block file.