Since this isn't called with a block argument directly, must check this.

This is starting to get kinda ugly, since maybe it takes a proc argument
that isn't a block.  Hmm.  Maybe this needs to be handled differently so
we can really call these with blocks.  Maybe install the block argument
to pre/post as a method on the object in question (with a gensymed name)
and just call it?