SetHasher sets the hasher used by Map.
All Hashers are functionally equivalent but contain internal state used to cache the results of hashing previously seen types.
A single Hasher created by MakeHasher() may be shared among many Maps. This is recommended if the instances have many keys in common, as it will amortize the cost of hash computation.
A Hasher may grow without bound as new types are seen. Even when a type is deleted from the map, the Hasher never shrinks, since other types in the map may reference the deleted type indirectly.
Hashers are not thread-safe, and read-only operations such as Map.Lookup require updates to the hasher, so a full Mutex lock (not a read-lock) is require around all Map operations if a shared hasher is accessed from multiple threads.
If SetHasher is not called, the Map will create a private hasher at the first call to Insert.