Add #include_next.
Fix #include for absolute path.

#include </stdio.h>, for example, shouldn't look for
stdio.h from the standard search paths.
Sort.
Improve string token concatenation.
#line argument can be a macro. (C11 6.10.4p5)
Add GNU CPP-style linemarkers.

GNU CPP supports the directive in the form of

  # linenum filename flags

This is called a linemarker.
Add HACKING.md.
Use EOF token instead of NULL.

We used to use null pointers to represent EOFs. That raised the risk
of null pointer access failure because if you forgot null check on
lex() return value, that could cause SIGSEGV.

We had been writing defensive code like this.

  if (tok && tok->kind == NUMBER) ...

Now you can write like this.

  if (tok->kind == NUMBER) ...
Cleanup: remove useless asserts.
'##' cannot appear at either start or end of a macro expansion.

Such stray token confuses subst(), so it's better to handle early.
Remove dead code.
Simplify.