Rewrite set-callbacks function

Fn -> Macro
Rename to with-callbacks
Add tests
Should fix issue #84
Do we really have to use dynamic vars here? Sounds like a lot of this state can be local.