Add chain cache

Hi,

I didn't finish with the tests yet, but this PR introduces a chain cache. The use case is when you need to fetch multiple times per request, and that you know in advance there is strong locality, so you benefit from first fetching from fastest to slowest cache.

If you like the idea I'll finish the tests.
Could write to first caches if the key is found in caches that are in "slower" layers