A link in the scope resolution chain. We first attempt to resolve an identifier
in the associated ScopeChainKind and, if nothing is found, proceed to
the next link.
Full name resolution: This requires converting generic arguments into symbols
which entails some amount of type checking and interacting with the environment.
This is therefore an async function.
Partial name resolution: This simply extracts what symbol has been named by the
user in a path. It can by synchronous and only requires a scope, not a type checking
environment. This is used when creating default permissions, as we want to be able
to do that before type checking has truly begun.