SPARK-2638 MapOutputTracker concurrency improvement

Spark-2638 Improve concurrency of fetching Map outputs

This issue was noticed while perusing the MapOutputTracker source code. Notice that the synchronization is on the containing "fetching" collection - which makes ALL fetches wait if any fetch were occurring.
The fix is to synchronize instead on the shuffleId (interned as a string to ensure JVM wide visibility).

For further details please refer to the JIRA.