this should be extending mop::role
add a bit of error checking
don't allow circular dependencies

This just leads to all kinds of weird cases where some classes are
created with one view of certain classes they are related to (such as
superclasses), but then that view changes drastically once everything
finishes loading, causing things to become inconsistent. Better to just
ban it entirely.