Fix Bug #598; QUEUE and DEQUEUE now behave correctly when the queue name is shadowed by one of their own local variables.
The fix is to rewrite these procedures as macros that get evaluated in the caller's context.
For performance, when the queue name doesn't clash with a local variable, the previous implementation is run.