Add support for non-file build products.

Auditors: benjy
Added support for exclusives declarations.

- Added exclusives fields to selected target types. The specific
  set of supported targets type is the set where we have real use-cases
  in mind. Adding to other target types is trivial.
- Added the CheckExclusives task, which propagates exclusive data,
  and generates error messages if conflicting exclusives are detected.

Note: Up to this change, this should be able to be merged directly into
master without screwing up any existing builds. This does compute divergent
classpaths for incompatible exclusives groups, but the classpaths are currently
not used. A subsequent change will merge the new classpath manipulations into
compilation tasks.

Auditors: benjy
Address review comments.

Review note: last chance to say anything before I merge this into master! Assuming
no objections, I want to push this into master before integrating the rest of
the exclusives code.

Auditors: benjy