[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. 
_Super_ minor nit, but do you mind reverting some of these whitespace-only changes?  I realize that your editor might have done this automatically, so one approach is to have `git` only add the lines that you modified.