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
Thats true, but locks are costlier than copying.  Also, assuming users will get the right lock is error prone.  Locking needs to be very well documented, but even then people will mess them up, so better to internalize them when they are really needed.

If `BLOCK_IDS` is not changed often, we can solve this problem by having the set as immutable (`ImmutableSet`) and only then need to lock on the update/read on the variable.