Restructure highlevel/version handling modules
ast: Simplify astnodeinfo() table
ast: Rename astBuildGROUPFromChildren() to astCloneChildren()
ast: Fix astGroupContains*() logic
cli: Rename hExpandArgsFileArguments() -> hExpandArgsFiles()
tk: Rename TK_RESPONSEFILE -> TK_ARGSFILE
tk: Remove extra spaces from tk_info table
Use proper OPT_* tokens for the CLI options
tk: Improve token/cli error reports
tk: Improve error message so it makes sense for the CLI too
cli: Fix indentation
cli: x += 1
cli: Remove astTakeLoc() calls where they're probably never needed
cli: Add common hParseOptionWithId()
Add support for arbitrary version trees

This basically reverts 04324839e6a05cdaad6d55b67e453ce952597ddc, except
that the UI is nicer and the #if generation seems to work quite well.

fbfrog needs to support more than just a simple list of versions without
nesting simply to support DOS/Linux/Win32 for both x86 and x86_64, because
FB itself uses a condition tree of pre-#defines to distinguish all the
targets, as opposed to a single layer of mutually exclusive #defines.

* Massive changes to the CLI: -version/-target replaced by -declare* and
  -ifdef/-select
* Now using a single builtin.fbfrog instead of multiple <target>.fbfrog
  files
* Version collection step is now the "evaluation" of the command line
  "script"
* New #if generation with common subexpression elimination that always
  eliminates the most common subexpression first
* New verification code generation
emit: Remove remaining cases of spaces inside parentheses
Add #pragma once after merging, and only if binding non-empty
ast: Remove unused type*() functions
Use astNewPPDEFINE() for -defines

to ensure the ASTNODE.paramcount field is properly set to -1.
ast: Make astGroupsContainEqualChildren private