An entity in the Rust type system, which can be one of
several kinds (types, lifetimes, and consts).
To reduce memory usage, a GenericArg is an interned pointer,
with the lowest 2 bits being reserved for a tag to
indicate the type (Ty, Region, or Const) it points to.
Specifies the user-given self type. In the case of a path that
refers to a member in an inherent impl, this self type is
sometimes needed to constrain the type parameters on the impl. For
example, in this code: