Readability improvements to SortShuffleReader

Some of the changes include:
* Changed ioSortFactor to maxMergeWidth to clarify what it means.
* Changed "partition" to "block" to avoid confusion with Spark's more typical use of the word partition.
* Added header documentation.
* Rearranged and documented the main merge loop.
Oops, forgot to replace blocksAwaitingMerge.size() with remainingToMergeAtLevel.  After making that replacement, I'm pretty sure it works out.

Here's my logic:
mergedBlocksHeadroomAfterMerge can be negative, but idealWidth will always be positive.  Further, if mergedBlocksHeadroomAfterMerge is negative, then idealWidth will be greater than maxMergeWidth.  This is because, if we have made it here, remainingToMergeAtLevel is >= maxMergeWidth, and subtracting a negative number from it will make it > maxMergeWidth.  So in all situations where mergedBlocksHeadroomAfterMerge is negative, the merge width will be chosen as maxMergeWidth, which is the correct behavior.