Class::MOP - A Meta Object Protocol for Perl 5