[SPARK-2288] Hide ShuffleBlockManager behind ShuffleManager

By Hiding the shuffleblockmanager behind Shufflemanager, we decouple the shuffle data's block mapping management work from Diskblockmananger. This give a more clear interface and more easy for other shuffle manager to implement their own block management logic. the jira ticket have more details.
I don't know if you want this to be a top level interface since it ties the notion of block locations directly into shuffle, whereas the current design only requires write/read. 

For example, if we use an external storage system to handle shuffle, location might not be a meaningful concept...