Rewrite set-callbacks function

Fn -> Macro
Rename to with-callbacks
Add tests
Should fix issue #84