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.
I think this will make `val mergedBlocksHeadroomAfterMerge = (maxMergeWidth - mergedBlocks.size() - 1)` to be a negative number, And `blocksAwaitingMerge.size() - mergedBlocksHeadroomAfterMerge` to be a number bigger than `blocksAwaitingMerge.size()`. I'm not sure if this will lead to some unexpected values. So the above code is a constraint to make sure we get a positive `idealWidth`