We should not represent "unbound" as a type, because it's only meaningful within a scope, it shouldn't "travel" across scopes as a type.
Instead, we should explicitly use the use-def map methods to check whether a name may be unbound in the places where it matters.