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.
should we turn this down to something like 10 seconds by default? Unlike in Hadoop, we don't rely on this in order for tasks to start or finish. It might be good to stay conservative here to make sure performance is not an issue. The main value as I see it for this feature in general is to deal with long running tasks anyways.