Making sense of metaclasses