This allows Lexer's "keep whitespace" mode to work for -E -traditional-cpp, which is used by people (ab)using the preprocessor to preprocess things other than C.
The internal uses we know about don't rely on the GNU behavior that whitespace is also preserved within macros, so this patch doesn't attempt to do that.
Could we handle all the changes to this function by just setting IsAtStartOfLine to Result.hasFlag(Token::StartOfLine) and clearing the Token::StartOfLine flag here?
I'm also not sure whether the current approach does the right thing if (for instance) a file starts with <space>#define <...>. Will we set the StartOfLine flag for the '#' token?