Hashing is a trait whose instances each represent a strategy for hashing instances of a type.
Hashing's companion object defines a default hashing strategy for all objects - it calls their
Note: when using a custom
Hashing, make sure to use it with the
Equiv such that if any two objects are equal, then their hash codes must be equal.