Fix macro stringizer.

When a token sequence is converted to a string using #, space characters
between template tokens are squashed (multiple occurrences of space
characters are replaced with a space), but the existence of them are
preserved.

For example, the following func-like macro call is expanded to "x.y x . y".

  #define S(x) #x
  #define M(a, b) S(a.b a . b)
  M(x, y)

Each token in 8cc has a bit indicating whether or not the token was
preceded by space. It was almost correct. However, when we expand a
token sequence, we mutate the original token's bit, so if the token
is used multiple times, the last result override all the other results.
This patch fixes the issue.
Rearrange struct Token and add comments.
Add one more test for the preprocessor.