[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.
right now we have two comm implementations in Spark: netty and a custom nio implementation. After 1.1, we should look into the two and consolidate them. We should pick one and make sure that is robust, instead of having two that complicate things.