~mcf/cproc

pp: Don't add leading space for first stringized token
pp: Implement variadic macros
expr: Slight simplification in function call parsing
pp: Remove some unnecessary conditionals

It is fine to just pass NULL, or the result of malloc(0) to free().
pp: Fix possible use-after-free

Restructure the loop slightly to avoid accessing the macro identifier
token after we have checked for the open parenthesis; it might
belong to a previous macro argument that has since been freed.
pp: Add test for function-like macro with no argument tokens
pp: Don't expand argument tokens if we don't need them
pp: Handle #define without trailing newline
token: Handle TEOF in tokendesc
pp: Minor style changes
pp: Finish '#' operator
token: Add TOTHER for other non-whitespace tokens

This is for any non-whitespace character that doesn't match any
other token categories, and could be valid if stringified, or the
preprocessor is used by itself.
pp: Use tokencheck in a few more places
pp: Fix some whitespace after preprocessing
pp: Add support for macro definition and expansion

The token pasting operator `##` still needs to be implemented.
scan: Keep track of whether tokens had preceeding whitespace
token: Add tokencheck utility function

This function is like expect(), but operates on a specific token
and does not read the following token.
token: Rename some functions
runtests: Add support for preprocessor tests
Next