By adding a hook to consume all tokens produced by the preprocessor.
The intention of this change is to make it possible to consume the
expanded tokens without re-runnig the preprocessor with minimal changes
to the preprocessor and minimal performance penalty when preprocessing
without recording the tokens.
The added hook is very low-level and reconstructing the expanded token
stream requires more work in the client code, the actual algorithm to
collect the tokens using this hook can be found in the follow-up change.
This is supposed to provide enough information to distinguish token from an intermediate macro expansion from a token of a final expanded stream.
It's not very well thought-through, though, the final set of enum values will definitely end up being different.