cpp: Fix error message for #error and #warning
ast: Solve out astFold()'s fold_unknowns parameter
ast: Add extra function for CPP expression folding & improve semantics

Now, it does astFoldKnownDefineds() -> astFold() -> astFoldUnknownIds() ->
astFold(). This way it will ensure to fold as much as it can before solving
out unknown ids and showing the corresponding "assuming undefined"
warnings.

Previously, it would do astFoldUnknownIds() after the 1st pass in the
astFold() loop - which may not have solved out as much as it could,
potentially causing unnecessary "assuming defined" warnings to be shown.
Move defined() folding code into cpp
cpp: Further improve unknown id folding
ast: Speed up astFold()

Now using "changes" counter to detect whether folding made any changes
to an expression, instead of astClone()/astIsEqual().
cpp: Register ids from unknown defined() folding as #undefs
util: Just allocate filebuffers directly, without keeping them in a list
util: Rename FILEBUFFERs to SOURCEBUFFERs
Remove unused declaration
util: Cache zstring SOURCEBUFFERs based on string data
util: Track SOURCEBUFFER source location
ast: Split into smaller modules