Some improvements in SortShuffleRead

1. Use BlockObjectWriter to write spilled data, statistics for memory spilled size and disk spilled size.
2. Manged the request shuffle block and its size locally to fix bugs in incorrectness of size uncompression.
3. Some small changes.

@sryza , would you mind taking a look at this. I've fixed the previous issue and made some other changes. Thanks a lot.
It looks like we do this in two places.  Can we move the code out into a separate function?