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 still think we may get ZERO `numMapBlocks`, because this value is got from `fetchRawBlocks()` and this merging thread is started before calling this function. So I think maybe we can separate getting `numMapBlocks` and `fetchRawBlocks` into two functions.