A template for projection comparison

An abstract class that implements all the boilerplate required for custom comparison semantics.