Like the DiscreteStateHashFactory (which this class extends) this class computes unique hash codes for states
based on attributes that the client specifies to use. However, unlike the superclass, this class also performs
state equality checks using only the attributes specified for each class. This is often a useful abstraction
for components like options whose policies are invariant to attributes specifying properties like ultimate task goal locations.