RdrName is the type of names that come directly from the parser. They
have not yet had their scoping and binding resolved by the renamer and can be
thought of to a first approximation as an OccName.OccName with an optional module
qualifier

A qualified name written by the user in
source code. The module isn't necessarily
the module where the thing is defined;
just the one from which it is imported.
Examples are Bar.x, Bar.y or Bar.Foo.
Create such a RdrName with mkRdrQual

An original name; the module is the defining module.
This is used when GHC generates code that will be fed
into the renamer (e.g. from deriving clauses), but where
we want to say "Use Prelude.map dammit". One of these
can be created with mkOrig

Keyed by OccName; when looking up a qualified name
we look up the OccName part, and then check the Provenance
to see if the appropriate qualification is valid. This
saves routinely doubling the size of the env by adding both
qualified and unqualified names to the domain.

The list in the codomain is required because there may be name clashes
These only get reported on lookup, not on construction

INVARIANT: All the members of the list have distinct
gre_name fields; that is, no duplicate Names

INVARIANT: Imported provenance => Name is an ExternalName
However LocalDefs can have an InternalName. This
happens only when type-checking a [d| ... |] Template
Haskell quotation; see this note in RnNames
Note [Top-level Names in Template Haskell decl quotes]

Let's suppose that Foo.f and Baz.f are the same entity really.
The export of f is ambiguous because it's in scope from the local def
and the import. The lookup of Unqual f should return a GRE for
the locally-defined f, and a GRE for the imported f, with a single
provenance, namely the one for Baz(f).

The children of a Name are the things that are abbreviated by the ..
notation in export lists. Specifically:
TyCon Children are * data constructors
* record field ids
Class Children are * class operations
Each child has the parent thing as its Parent