SPARK-2099. Report progress while task is running.

This is a sketch of a patch that allows the UI to show metrics for tasks that have not yet completed.  It adds a heartbeat every 2 seconds from the executors to the driver, reporting metrics for all of the executor's tasks. 

It still needs unit tests, polish, and cluster testing, but I wanted to put it up to get feedback on the approach.
actually it's not really clear to me what this is guarding. Can it not be replaced with checking whether `attamptedTask` is set to `None` (and you make `attemptedTask` volatile)? Is the idea that this is set to `true` only after the `taskStart` variable is defined?