Seems that to get first-class macros one would have to:
1) Not evaluate arguments directly in ac-call, but keep the original arguments and envs
2) Add a clause in ar-apply to deal with macros
3) Make sure that in ar-apply, arguments are evaluated for the case where it is still a function/list/hashtable and not a macro
Basically use lazyness only until we find out we're calling a macro.
I'd implement it, but I'm not certain pg wants to go this direction. I don't think it'd change anything else to the language even though under-the-hood it uses some lazy techniques.