[SPARK-3613] Record only average block size in MapStatus for large stages

This changes the way we send MapStatus from executors back to driver for large stages (>2000 tasks). For large stages, we no longer send one byte per block. Instead, we just send the average block size.

This makes large jobs (tens of thousands of tasks) much more reliable since the driver no longer sends huge amount of data.
Yeah, I don't buy that either. I think what's really confusing though is if a method doesn't return anything but looks like this:
```
def eatFood(...) = {
  ...
}
```
If we always add `Unit` to the end we'll never have this problem.