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.
This could cause executors to take a long time (e.g. minutes) to shut down becuase the akka timeout could be high (i.e. if the driver cannot respond to these heartbeats because it has shut down it's actor system). It depends a bit on the order in which things shut down. Have you tested this at all on a cluster? I wonder whether the driver actor system that respods to these heartbeats shuts down before the executors do.