(Summary of email conversation; pls discuss)
PACKAGE:
type must surely create bindings in the variable object, or type definitions can't be exported, and that would be a misfeature.
CLASS:
type should be implicitly static and should bind in the variable object of the metaclass (ie it's an instance property of the metaclass), so that type T in class C is available at compile time as C.T.
FUNCTION/BLOCK:
type should probably be bound in the block object (like let), but this is really not a major use case and for consistency's sake it would probably be just as well if it were bound in the variable object (ie, if it were hoisted like var).
Alternatively, we could restrict type to being defined at top level in a function, like we do for nested functions. (Personally a favor this, because hoisting is a little evil and we don't want to propagate evil.) On the other hand, type has fewer problems than const since type definitions always have a right-hand-side and it only references other type stuff that has already been defined.