Add TaskExecutionSummary to Run Summary (#4116)
This commit adds
- an `execution` key to each task summary. `omitEmpty` is used, so the
key will not show up in `--dry=json` output, when there was no
execution.
- a top level `execution` key to the Run Summary which includes counts
for successful, failed, cached tasks. This is the same as the output
that we also see in terminal UI in logs.
The existing `RunState` struct is moved into the `runsummary` package.
The `.Run()` method now returns a `TaskExecutionSummary`, which gets
updated over the course of the execution, and then attached that to the
`TaskSummary`. `RunState` (now known as `executionSummary`) and
other related structs are now private to the `runsummary`
package, and all interactions are through the `RunSummary` struct (namely:
`TrackTask()` and `Close()`)