[SPARK-2755] More general Storage Interface for Shuffle / Spill etc

Hi, this is for https://issues.apache.org/jira/browse/SPARK-2275

The code here is not intended to be merged as current status, instead, I just try to show what I think this change could be.

so I put up this PR as a quick way to verify the idea and see how much things need to be modified. It definitely need to be improved or even restructured. 

And this is for solving the problem 1 in the jira ticket, since problem 2 rely on problem 1, So I  want to use this PR to present my general ideas and to find out what do you think about this whole thing. Thanks.