Introduce MetricsFactory to better control how metrics are constructed

This serves to factor out caching and test support facilities from metrics construction
Fix SimpleCostModel such that Selection cost considers its own selectivity
Add CartesianProductPlanningIT test to check cartesian products are picked based on selectivity
Rename methods in OverridableMetricsFactory for clarification