Introduce a "components" API.

This API is intended to represent unique configurations of a single build step. For AMB2's backend, it has no meaning. However, for generators like Visual Studio or XCode it will be used for grouping project files properly.

An example of SourceMod's core/AMBuilder changes: https://gist.github.com/dvander/6273fcefd06bc460dbe2

A few notes:
 - Although this API is specific to C++ compilers - in the future, it should not be difficult to generalize as a top-level concept. For now though, it's best to start it off in the specific niche where it's needed.
 - BuildProxy emulates some of the API BinaryBuilder has. I didn't use BinaryBuilder directly, since these objects should be illegal to pass directly into `builder.Add()` (otherwise, they'd get added twice). This also will let Add() later on, potentially filter which tags get built.
 - This API isn't strictly necessary to make vcxproj generation possible - we could infer the grouping by keying on the context. But that feels icky. This should be cleaner.