Revise type-only alias logic to not depend on full type checks
This PR extensively revises our type-only import/export alias checking to not depend on full type checks. With the PR, it is no longer necessary to fully type-check all files in a program to obtain a stable set of diagnostics for a given source file--rather, it is sufficient just to check the particular file.
The new checking scheme works as follows: Resolution of each alias records any type-only node that affects that alias (i.e. non-transitively). Checks for whether an alias should be considered type-only then walk up the alias chain (possibly resolving aliases along the way) until it finds a type-only affecting node, if one exists. Propagation of alias information is not attempted as it would require storing more information just to save a typically short and inexpensive walk.
This removes the last known difference between single-threaded and concurrent type checking.
Fixes #2114.