MethodWrappers are implemented via object-as-method, which implement #run:with:in:. Other examples in the current Trunk image include ObjectsAsMethodsExample, WrappedBreakpoint, and TestCoverage. While MwMethodWrapper is an Object, WrappedBreakPoint and TestCoverage are both ProtoObject.
Method wrappers could be regarded as proxies for compiled methods, which means they should inherit from ProtoObject, too.
The MethodWrappers package mostly adds (1) a flexible composite pattern for object-as-method (i.e. wrap the wrappers) and (2) a convenience protocol around object-as-method, which includes a blacklist of methods not to wrap. :-)