Add common cache and per-build cache

This is merely a POC to start a discussion. I'm sure there's a nicer way of achieving the same thing.

Allow each builder to cache some files for re-use in the next build. This allows for poor-man's dependency chaining.

Additionally, add a common cache pool for all builds. This can be used for saving (for example) downloaded files to be shared between builds.

Needed for the Bitcoin build process overhaul. I'll link the PR for discussion once it's posted.