feat: 🎸 only cache one entry per dataset
Before: every endpoint call generated a cache entry. Now: all the
endpoints calls related to a dataset use the same cached value (which
takes longer to compute). The benefits are a simpler code, and most
importantly: it's easier to manage cache consistency (everything is OK
for a dataset, or nothing)

BREAKING CHANGE: 🧨 the /cache, /cache-reports and /valid responses have changed.
feat: 🎸 only cache one entry per dataset: Before: every endpoint call generated a cache entry. Now: all the
endpoints calls related to a dataset use the same cached value (which
takes longer to compute). The benefits are a simpler code, and most
importantly: it's easier to manage cache consistency (everything is OK
for a dataset, or nothing)

BREAKING CHANGE: 🧨 the /cache, /cache-reports and /valid responses have changed.