Prepr: detect and handle recursive macro invocations

The standard says that recursive macros should not be expanded. We keep
a stack of the macros currently being expanded. If we encounter one
that is in the stack, we leave it be.

We don't actually scan the macro stack every time - instead there is a
flag in each macro which we set and clear as it enters/leaves the
macro stack.

To facilitate all this, we added a new Token END_MACRO which is treated
like 0-length whitespace. Upon consuming it we pop the top macro from
the macro stack.