Further, I'll validate that `Metric`s always return a non-negative distance, and throw an `IllegalMetricException` otherwise.