Make UniqFM typed on its key
SPJ had expressed concerns about using UniqFM in another patch of mine.
Rightfully so as it erases all information about what we actually use for keys! We might as well use a IntMap at that point.
But instead of adding yet another Env type synonym I added a type to UniqFM. This way it's obvious what keys we expect and it stands out when the key is in fact a different one.
Some of the UniqFM functions are now more restricted. Eg intersect requires both maps to use the same key type.
This addresses ticket #17667 (closed).