Handle scanners w/o paths, keywords etc
Build-scoped environment tables

Add support for "Env" and "ReplaceEnv" tables in the data passed to
Build(). The tables have exactly the same form as those inside a Config
table. Unfiltered variables defined here are added to the default
environment and are thus available globally, even to the IDE project
generation modules. Variables with a "Config" filter are added to the
dictionary of any configuration matching the filter (they are not added to
the global environment).

The motivation for this change is that there is currently nowhere to
define variables like OBJECTROOT, which a user might like to share between
IDE generation and build configuration, such that they are visible to
both. It also makes it possible to take advantage of the environment's
interpolation syntax in building paths to configure the IDE project
generation modules.

The new tables can also also provide a slightly less verbose alternative to
inheriting a table of common variables in every configuration, for
defining shared configuration variables.

Fixed the implementation of "exclusive" in the list flattener.

The global environments are now applied after tool loading when a
configuration enviroment is being built, so that tools can continue
to assume they don't need to worry about overwriting user variables.