utils.algos.persistent_hash: Add hash memory mechanism
utils.algos.persistent_hash: Add hash memory mechanism

Make it possible to run hash calculation in a context, where certain
hash values have been preset.  This is useful for recursive structures.
This works by using memory() context manager on a corresponding hash
class:

   with my_hash.memory((myobj1, hash1)[,...]):
       hash = my_hash(myobj1)
       ....

edgedb/edgedb,edgedb/edgedb,edgedb/edgedb