MopOV_get_at_slot should not return undef, it should return NULL, the XS layer should then handle the translation. This required a slight adjustment to the attribute code too since it was relying on the return value of get_at_slot too.
more appropriate name
add in {add,get,has}_attribute to classes