Refactor Payload.

* Break Payload into a Payload/PayloadField abstraction, and fix the major
  design flaw preventing clean Target subclassing.
* Allow explicit freezing of Payloads and always freeze Payloads in the
  Target superclass `__init__`.
* Tighten up invalidation hashing (fingerprinting) and testing.
* Change the name of "invalidation hash" in general to "fingerprint", since
  the former is ambiguous and used to mean different things in several
  different places.
* Make Repository and Wiki plain objects rather than Target subclasses.
  Users who want to expose a custom Repository instance in all BUILD files now
  register this instance in their internal backend's register.py as an exposed
  object.  Then consumers of this Repository refer to this object directly.
  This allows the removal of the horrible hack in JvmTarget.provides.
  It gets us much closer to having truly immutable Payloads.

Testing Done:
ci.sh is green locally

CI is green: https://travis-ci.org/pantsbuild/pants/builds/36363381

Reviewed at https://rbcommons.com/s/twitter/r/1063/
Coalesce errors when parsing BUILDS in a spec

The idea is that when you submit a pants command, it will emit an error for ALL erroneous build files in a spec.

Note: if multiple specs are given on the command line, if a given one has an error, then only the first's will be printed, then it will error out.

I handled the errors as best as I could, becasue we need to know the flag before a lot of the options parsing happens.

Testing Done:
I tested manually and it works. I need to update the unit tests but wanted to validate my approach first.

Reviewed at https://rbcommons.com/s/twitter/r/1061/
Remove ROOT_DIR everywhere it is mentioned and replace it with build root.

Testing Done:
$ ack ROOT_DIR
(no results)

(since this is only docstring changes, no need for tests)

Reviewed at https://rbcommons.com/s/twitter/r/1084/
Merge branch 'master' into lahosken/bdicthtml

Conflicts:
	3rdparty/python/requirements.txt
excellent feedback is excellent
Fix order-dependent force handling: if a version is forced in one place, it is forced everywhere.  Two JarLibraries might compare equal even though their force setting is different; we want force to be dominant.

Reviewed at https://rbcommons.com/s/twitter/r/1085/
excellent feedback is excellent
Support old-style flags even in the new flag system.

E.g., --compile-java-foo-bar anywhere on the cmd-line is the same
as ./pants compile.java --foo-bar.

This will make migration easier, as people are used to the old style,
and we may even want to keep this forever, if some users prefer
the verbose flags.

Testing Done:
Ran all the tests.

Reviewed at https://rbcommons.com/s/twitter/r/1093/
Tiny tweak to legacy option printing.

Also rewrote some comments for clarity.

Reviewed at https://rbcommons.com/s/twitter/r/1094/
Allow a task type know its own options scope.

E.g., JavaCompile should know that its options are under compile.java.

Also fix some stale comments from the goal->task terminology change.

Testing Done:
Ran all the tests. Tested that this works when registering options in the new style (will be sent for review in a future change).

Reviewed at https://rbcommons.com/s/twitter/r/1095/
Hook new-style registration up to the goal runner.

Provides appropriate special-casing for GroupTask.

Note: relies on https://rbcommons.com/s/twitter/r/1095/.

Testing Done:
Ran all tests. Manually tested new-style registration on top of this.

Reviewed at https://rbcommons.com/s/twitter/r/1096/
Add missing BUILD dep.
Switch a handful of flags over to the new registration style.

This includes a superclass-subclass scenario (ConsoleTask-ListGoals)
and a GroupTask scenario (JvmCompile).

Note that the code that reads and uses the flags needn't change yet.
The legacy flags layer places the values in the existing destinations.

Note: Relies on https://rbcommons.com/s/twitter/r/1096/.

Once this is in I will write up a quick guide to porting flags,
and then we can set ourselves loose on them!

Testing Done:
Ran all tests. Manually ran the relevant pants goals with various flag settings.

Reviewed at https://rbcommons.com/s/twitter/r/1097/
Patch code review comment fixes back in.

They got lost due to my misuse of ./rbt.
our example repositories snuck into the build dictionary.

Our internal_backend/repositories defines a couple of example repositories that our BUILD files can refer to.

Our BUILD Dictionary builder code looks at symbols defined in our BUILD files to figure out what do doc in http://pantsbuild.github.io/build_dictionary.html

So...

Give our old @manual.builddict() decorator a new optional arg, suppress.

Mark those example repositories with manual.builddict(suppress=True)

BUILD Dictionary builder checks for suppress==True and omits those

Testing Done:
publish_docs.sh , eyeballed

https://travis-ci.org/pantsbuild/pants/builds/36815549

Reviewed at https://rbcommons.com/s/twitter/r/1101/
Merge branch 'master' into lahosken/bdicthtml