This implements, more or less, the scaffolding described in #36. This commit does not actually make tools behave differently in any configuration (so this is mostly a placebo) but after this, tools can adjust their behavior.
Notable additions/departures from the original proposal include:
* Support for "custom" configurations outside the built-in set
* The addition of `test` and `bench` as built-in configurations, since 2/2 developers use them
* Internal API has new "helper" methods for common "tool questions" (should we optimize, are we testing, etc.) Ideally, custom configurations could indicate their own values for these questions, although that's outside the scope of this patch.
Doc PR to follow.