cpp: Add support for parsing #warning/#error
Delete tarball if wget fails

because wget will otherwise leave an empty tarball behind.
ast: Ensure that files that weren't found have ASTNODE.expr = NULL
emit: Handle wildcard/dos/linux/win32 version expr atoms
ast: Handle target OR's in version matching
Scan input directory for *.fbfrog files
Treat preset file/dir names as relative to preset's location
ast: Fix version block matching

For example, for astAddVersionedChild():
	existing:
		version "1" or "2"
			foo
	new:
		version "1"
			bar
Technically "1" matches "1" or "2", but that's not the kind of
matching desired here, because adding bar to the same version as
foo here would be wrong, as bar is not available under "1" or "2",
but just "1".

Because of that, a more exact matching function must be used;
for now astIsEqualDecl() (same as used before version matching
overhaul) should be good enough even though it would treat
<"1" or "2"> and <"2" or "1"> as being a mismatch.

Note that not just the OR is affected, also the '.' member op:
	existing:
		version "1".win32
			foo
	new:
		version "1"
			bar
or:
	existing:
		version "1"
			foo
	new:
		version "1".win32
			bar
in both cases, bar can't just be inserted at the same version as
foo.

The same principle is needed for astRemoveVerBlockWrapping()
aswell, only astGet1VersionOnly() can do the more relaxed/soft
matching.
Restructure include merge tests
Remove astStringifyVersion() and use emitAst() instead
ast: Fix version matching in astGet1VersionOnly()
Ensure to emit parentheses around #define bodies if needed
ast: Overhaul version collection and matching

- Now only the longest version strings will be collected, i.e.
	verblock 1
		verblock 0
  becomes
	1.0
  and not
	1
	1.0

- For example, if there are versions 1.linux and 1.win32, then
  there's no point treating 1 alone as "generic" version...

- This removes the need to worry about folding version
  expressions, e.g. <1.linux or 1> = <1>.

- Proper version comparison function added, astIsEqualVersion(),
  that should be used instead of astIsEqualDecl() because it
  handles version OR BOPs properly.

- Version collection split up into multiple steps
- Duplicates are eliminated now, needed if presets contain
  multiple version blocks for the same version.
- Wildcards are properly expanded now
Don't emit parentheses around member/index BOPs
ast: Fix astIsEqualVersion() to check member BOPs recursively
ast: Rewrite/simplify astGet1VersionOnly()'s version matching
ast: Flatten verblocks before matching

This way there's no need to worry about how to just the version
number for recursive astGet1VersionOnly() calls.
cpp: Fix directive parsing to treat preceding #error/#warning as BOL
ast: Prettify VERBLOCK dumping
tests: Add test for AST merging and multiple versions