Implements a Table-like type for mapping a PType to some value. The PType keys undergo basic canoncalization, meaning that two different - in terms of reference equality - PType instances can represent the same key.
The canonicalization makes sure to not ignore type information relevant to the mid-end and code generation stages.