New CacheDownloader

* Rate limit - 1 download per cache key at a time
* Properly track the use of readers
* Handle all the errors properly (remove shadowing of err)
* Remove files as failures occur

[#79624026]

Signed-off-by: Matthew Sykes <matthew.sykes@gmail.com>