[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).
It just try to avoid the performance regression in normal cases. The memory preserved for Python worker is undefined, but it's limited to 512M in this patch. Some job may have performance regression if we have too STRICT memory limitation in this patch.