cpp: Use artificial #include statements to load root files

This allows the CPP to easily apply the same treatment to root files as
for other #included files, e.g. include guard optimization (in the future).
Of course, root files are still special in other ways - they're not
affected by header file search or -filterout/-filterin.
cli: Fix long line in help output
Eliminate duplicate code
Support data type #defines, auto-drop const #defines
lex: Don't show absolute file path in verbose output
lex: Remove verbose output

It's not useful/needed at the moment.
cpp: Refactor stack to allow adding more fields to the stack nodes
cpp: Add include guard optimization

This helps us avoid unnecessary lexing and tkInsert()'s which is the CPP's
bottleneck as has been seen in ae749a2d22c84ae1ce158d83be3d0246019403cf
already.

The real problem is that fbfrog loads entire files instead of just one line
at a time, but that's not easy to change. fbfrog's parsing is based around
the idea of the big tk buffer holding all the tokens, allowing arbitrary
insertions/deletions, and arbitrary parsing with infinite look back or look
ahead.
cpp: Don't show "assuming undefined" warnings for reserved symbols
util: Simplify path solver stack