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.
Is blocksToSpill not right here?  inMemoryBlocks will hold the blocks that we haven't spilled, right?