[SPARK-2538] [PySpark] Hash based disk spilling aggregation

During aggregation in Python worker, if the memory usage is above spark.executor.memory, it will do disk spilling aggregation. 

It will split the aggregation into multiple stage, in each stage, it will partition the aggregated data by hash and dump them into disks. After all the data are aggregated, it will merge all the stages together (partition by partition).
There is huge performance difference, even in doctests, so I rollbacked again.

time python pyspark/shuffle.py

real	0m0.583s
user	0m0.488s
sys	0m0.093s

$ time python pyspark/shuffle.py

real	0m20.674s
user	0m6.119s
sys	0m13.993s