Store aggregate read/execute count statistics (#8286)
### Why?
I want to determine percent "cache hit" rates for tasks. Tasks with very
low task hit rates should likely have their annotations removed.
Eventually, we might be able to use this information in a more automated
way, by leaving the annotation in, but skipping the caching for
low-cache-hit tasks.
### What?
This implementation only logs persistent tasks, which should compromise
all or the majority of tasks we care about for memory usage.
The implementation should bail out quickly if caching is disabled, so it
should be okay to leave in release builds, which is important for making
it easy to gather statistics from willing users.
### Testing
Run included unit tests!
This is used as part of
https://github.com/vercel/next.js/compare/canary...bgw/cache-hit-stats