[SPARK-2124] Move aggregation into shuffle implementations

This PR is a sub-task of SPARK-2044 to move the execution of aggregation into shuffle implementations. 

I leave `CoGoupedRDD` and `SubtractedRDD` unchanged because they have their implementations of aggregation. I'm not sure is it suitable to change these two RDDs.

Also I do not move sort related code of `OrderedRDDFunctions` into shuffle, this will be solved in another sub-task.


So the one problem I see is that the InterruptibleIterator around these calls was lost when you moved them here. This is not great because it means tasks running these won't be cancelable. Can you add it back? You already have a TaskContext as a field of ShuffleReader.