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'm afraid this will make merge factor too small and too many spilled files if memory is not enough

Is there anything we could do differently?

> I think if we have only one block in memoryBlocks, we can directly write to disk without deserialize-serialize again.

Good point.