[SPARK-4387][PySpark] Refactoring python profiling code to make it extensible

This is a refactor of the [profiling feature](https://github.com/apache/spark/commit/c5414b681868a0a11cc5a94184116e66e8d3e9c0) done by @davies 

This will allow us to hook in custom profilers and output sinks more easily. 
Ok, I was going off of this file (https://github.com/apache/spark/blob/master/python/pyspark/accumulators.py#L18) as an example.