Decouple Cache and CacheEngine

The cache class currently reads config out of the engine classes to feed them back in. It's also possible to effectively ignore a cache engine's config by accessing the engine object directly, which doesn't enforce anything regarding its own config.