Refinements to `EqualityHashKey` including requiring a `key` argument.

The canonical purpose of `key` is to calculate a partial key hash that is
good enough.  This is *much* better than using the default hash value.

`'__default__hashkey__'` is used as the default hash value, not a random number.

Many implementation questions and discussion were added as comments to
facilitate development.