Fix bug in junit_run.py.

Not all targets have classes. E.g., targets that aggregate
other targets.

Auditors: pl
Fix handling of upstream deps in zinc.

A) Put them on the classpath.
B) Only provide upstream analysis if it actually exists.
C) Transform FQCNs to classfile paths, which is what the dep checker understands.

Auditors: pl
Put jar symlinks in a well-known location.

Previously they were qualified by a hash of the current target set,
but when that changes we can get spurious missing deps, because
the old hashes are still in the analysis file.

Auditors: pl
Begin moving away from old-style products registration.

This commit gets rid of all uses of the 'classes' product
in favor of new-style products.

Auditors: pl
Add a docstring.
Restore a product requirement.

It was deleted due to naive assumptions about it not being needed.

This brings home that we really need to formalize the products
mechanism, so it's easy to figure out who produces what and who
consumes what.
Lots of comments on products.py.

So we know what its deal is when we come to change it.
Get rid of memoization in missing dep analyzer.

It was causing more trouble than it was worth.

I will profile the code to see how much worse this makes
things, and find other solutions if needed.

Auditors: pl
Fix broken artifacgt caching for codegen.

Added a bunch of clarifying comments in the code
to prevent future regression.

Auditors: pl
Merge branch 'master' into jsirois/sync/pants-1

Conflicts:
	BUILD.commons
	src/python/twitter/pants/goal/products.py
	src/python/twitter/pants/targets/with_sources.py
	src/python/twitter/pants/tasks/code_gen.py
	src/python/twitter/pants/tasks/ivy_utils.py
	src/python/twitter/pants/tasks/jar_create.py
	src/python/twitter/pants/tasks/junit_run.py
	src/python/twitter/pants/tasks/jvm_compile/java/java_compile.py
	src/python/twitter/pants/tasks/jvm_compile/jvm_compile.py
	src/python/twitter/pants/tasks/task.py