Wouldn't a really Scheme-y macro rewrite the tests to use call/cc to pass the continuation into the test function and rewrite the asserts to call the continuation to jump out of the test when the assert failed?
The security community have been thinking about these issues for some time. Here's that overview of global names vs. nicknames vs. pet names I mentioned at XTC.