Cache abstraction

Fully backward compatible with the existing models map and query cache, allows a client of the library to implement their own variant on the StateCoordinator protocol in order to manage the caches differently. A very small library that attaches avout as a key store for coordination of model state between caribou instances is forthcoming, and builds on this functionality.

The usage of clean is needed because the clobs in the models map do not serialize, and some stores (like avout) require serialization.