common/metrics: break Metrics into composable pieces