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.

For this class I would document it. Something like:

```
/**
 * A heartbeat from Executors to the driver. This is a shared message used by
 * several internal components to convey liveness or task execution information.
 */
```

I would add a class called `HeartbeatResponse` here that currently has a single field `reregisterBlockManager`. Right now it's really