Rework the hash table entry abstraction.
This simplifies some of the code (at the expense of a longer
definition for the abstraction leading to a longer hashtb.scm
altogether), and makes it less prone to mistakes with using the
keys and data of entries without checking their validity -- which
will matter especially for hash tables with ephemeron entries when
those are implemented.
Check the results of the key hash table function. Sprinkle some
guarantees throughout the code. Disable type and range checks in
the hash table methods, where it is safe to do so.
With type and range checks still enabled, performance on strong eq
and eqv hash tables is no different from what it was last week.
Performance on weak hash tables is ever so slightly worse, but that
is because weak hash tables were incorrect before.
New tests check for some regressions.