Move MockTarget to its own library and package

In anticipation of using MockTarget in more tests.

Auditors: benjy
typos: s/Sirios/Sirois/g,s/dependants/dependents/g

Auditors: benjy
Privatize Context.add_target

Auditors: benjy
Privatize Group.create_chunks

Auditors: benjy
Add a simple test for CacheManager

Auditors: benjy
Make dev-mode pants pass on return code correctly

Auditors: benjy
Add __repr__ method to Goal and Group

Auditors: benjy
Add an "id" field to JarDependency

Auditors: benjy
pythonic False-casting

Auditors: benjy
boolean logic bug

Auditors: benjy
more descriptive name for CacheManager._validate

_sort_and_validate_targets

Auditors: benjy
Generate abbreviated names for a list of strings.

This is useful e.g. for obtaining concise, unique identifiers
for target IDs that otherwise share a lot of verbose segments
in common (e.g. shared directory structure).

Auditors: benjy
Add a doubly-linked DAG data structure

This will be useful for various parallelization-related dependency
analysis.

Auditors: benjy
Support single- and multiple-target VTS's.

Previously, each target got wrapped in a VersionedTargetSet, but we relied
on the assumption that it was alone in its set until later, when we
grouped the single versioned targets into multi-target sets for
compilation.

This makes this single- vs. multi-target VersionedTarget distinction more
explicit and allows for more complicated logic elsewhere about which
targets to group together.

Auditors: benjy
Roll a timer into Context.

I will want to do other timing related things inside Tasks, so
a Timer is a useful thing to plumb through in the Context.

Auditors: benjy
Merge remote-tracking branch 'origin/ryan-noparallel'