makeSolutionCache

Builds the SolutionCacheIfc for an evaluator from eval.

The engine factories don't accept a null SolutionCacheIfc, so a "disabled" solution cache is implemented by toggling allowCacheLookups and allowCachePuts to false on a MemorySolutionCache.

Exposed (rather than kept private) so module-external tests can verify the spec → engine cache mapping without needing a public accessor on Evaluator.