[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.
the problem here is that original shuffle Manager and blockManager's initial sequence is not defined. And they have multiple dependency , shuffleManager need to access some member from blockManager. And some of the BlockManager's member all access shuffleManager.  Thus I make it work the same way as the ConnectionManager. If not init with blockManger, might need to enforce initial sequence in SparkEnv and might add extra code to make sure when they access each other. the instance in SparkEnv is already initiated.