(wrap name params ..body)
  name: a sym
  params: an arr
  body: zero or more forms

Wraps another method in the same class.

When a method is invoked using its unqualified name, the runtime...

The wrapper method's name must be the qualified name of the method which is being wrapped. To wrap the meth dance method in the Joyful state, write wrap Joyful:dance in a different state or mixin.

If you replace the name of the state with an underscore, e.g. _:dance, then this clause will define a "wildcard wrapper" method. A wildcard wrapper can wrap any method which shares the same unqualified name. In practice, this means that all of the wildcard methods are placed on top of the method stack, in an unspecified order.