The previous one was too broken, so just rewrite the code that invokes
a macro. Basically it was evaluating things too early, and mishandling
nested invocations. It's also easier to understand now.
Keep backslash-newline around in macro definitions. They get
processed when the body is evaluated.