better error here
this needs to be inherited
move instance creation to the metaclass

makes more sense here, and this also provides an actual api for creating
new instances that doesn't rely on whatever weird api for ->new the user
actually wrote - new_instance always just takes a hash of attribute
values, which makes extensions much easier
this is basically how we always want to use it
make required methods line up better with regular methods
handle this at the point where we set the superclass
clean up this logic a bit
factor this out
stop calling the before:FINALIZE and after:FINALIZE events twice
make sure this ordering is preserved
make the attribute api line up with methods and required_methods
clone methods and attributes during role composition