Starting to add support for exclusive tags.

This is pushed as a sanity-check code-review. It's not complete
enough to really be useful, but the core functionality is together
enough to get someone else to take a look, and make sure it's
a good idea. I don't plan to merge this into master until it's
feature-complete.

This change adds a new attribute to build targets,
called "exclusives". The exclusives is a dictionary
mapping from exclusive keys to version specifier strings.

The idea is that if code depends on a specific version of
some component, then it can declare that by adding an exclusives
entry.

At build time, any target whose transitive dependency graph contains
more than one value for any exclusive tag will generate an error.

Exclusives will also be used for compilation partitioning: the
source files associated with two targets can only be part of the
same compilation partition if they contain no conflicting exclusives.

This change adds basic support for exclusives. Exclusives can be
declared for build targets, and the exclusives set for the
transitive dependency graph are computed for each target. For testing
purposes, scala_compile currently generates a warning message if it
detects any scala target with conflicting exclusives it its transitive
dependency graph.

A simple unit test is also provided for the transitive
exclusives propagation.

Auditors: benjy
Added a check_exclusives task.

- This change converts the exclusives propagation into a build phase.
- Conflicting exclusives are detected by the CheckExclusives task,
  and cause the build to fail.
- Scala compilation generates a warning if the scala targets to be compiled
  have incompatible exclusive tags.
- The propagation code has been modified to avoid recomputing things.
- Exclusives tags have been added to all of the target types.
- A test was added to verify that the CheckExclusives task correctly
  detects errors.
- Documentation was updated and extended.

Reviewers note: Adding the "exclusives" tag to all of the target types seems
very ugly, but I wasn't able to find any other way of making it an option
on all of the targets. Is there some python/pants idiom that would make that
cleaner?

Auditors: benjy
Addressing review comments

- changed to a python idiom for default exclusives arguments.
- pruned redundancy from documentation.
- renamed test file.
- changed parameter handling for creation of tasks from the
  TestCheckExclusives test.
- cleaned up exclusives propagation for InternalTarget.

Still todo before this can merge to master:
- Examine all of the target types, to identify the set which are proxies,
  and make sure that all proxy targets propagate the exclusives correctly.

Auditor: benjy
Extended exclusives propagation.

The first draft of "exclusives" tagging support didn't handle two
corner cases:

(1) Types that weren't subclasses of InternalTarget, but had overridden
    implementations of the _walk method for tracing through dependencies;
(2) JVM based target types that could be transformed into jar dependencies.

This change adds coverage for those cases.

Auditors: benjy