a category on NSObject to allow for runtime introspection