Interface normalization.

Although the CacheProvider provides several interesting capabilities, most are not available through the Cache interface. This PR simply declares new interfaces and CacheProvider as implementation of theses.

Note that FlushableCache could be implemented only by implementations that were actually able to flush all entries, instead of CacheProvider.

This method is supposed to be used only in factories and during instantiation, where the consumer (factory class or method) can actually be coupled with the concrete implementation of the cache instance.

I don't think changing namespace at runtime has any use-case: I'd rather use a different cache instance in first place.