Cleanup of cache manager and jvm compile task.

- Make fingerprint_strategy a ctor arg instead of passing it around everywhere.

- Get rid of a stale recomputation of sources-by-target.
Don't use # in cache keys; http throws away the suffix

Testing Done:
CI passes.

Bugs closed: https://github.com/pantsbuild/pants/issues/184

Reviewed at https://rbcommons.com/s/twitter/r/453/
docs: update howto_contribute: pants-reviews exists

Let us not be mired in nostalgia for the time when pants-devel could handle the traffic of our many, many code reviews.

Reviewed at https://rbcommons.com/s/twitter/r/424/
git_version wasn't expecting a version number that contained letters, LOL

My whacked-out installed git from DTurner's mad science lab has version "number" 1.9.1.598.g9119e8b .
git_version's regexp wasn't expecting letters mixed in there.
So this test was crashing, trying to call None.group(2)

I changed the behavior: get the part of the version that looks like
dotted numbers. Get the 1.9.1.598, drop the letter-y part.

Testing Done:
Now the test doesn't crash.

(The test fails for me running DTurner's mad science git.
DTurner knows and is saying things that make me think he
knows what's going on, yay)

Reviewed at https://rbcommons.com/s/twitter/r/456/
Run python tests under goal.

This introduces a new task to run python tests.

It leaves the old-pants test running intact, so
there's no change for existing users.
Fix a mismatch in the expected and actual module names in ivy resolution.
Set the target SDK in the AndroidDistribution __init__

This is a plceholder until I create the manifest parser, however I am
going to do that. I have verified that these classes are successfully
passing the tools, which is a start.
Implement new plugin to implement callables that need to create targets

Testing Done:
https://travis-ci.org/pantsbuild/pants/builds/26734850

Local testing done too:

[tw-172-25-20-142 pants]$ head examples/BUILD
make_lib(org='com.twitter', name="test", rev="1.0")
[tw-172-25-20-142 pants]$

[tw-172-25-20-142 pants]$ git diff
diff --git a/src/python/pants/backend/core/register.py b/src/python/pants/backend/core/register.py
index 1539ca1..468d35c 100644
--- a/src/python/pants/backend/core/register.py
+++ b/src/python/pants/backend/core/register.py
@@ -61,8 +61,9 @@ def partial_path_relative_util_aliases():

 def callable_build_file_functions():
-  return {}
-
+  return {
+    'make_lib': make_lib,
+  }

 # aliases
 def target_aliases():
@@ -175,3 +176,29 @@ def register_goals():

   goal(name='roots', action=ListRoots
   ).install('roots').with_description("Print the workspace's source roots and associated target types.")
+
+
+def make_lib(alias_map, org, name, rev, alias=None, sources=True, excludes=None):
+  """A helper method to create jar libraries.
+  """
+
+  dep = alias_map['jar'](org=org, name=name, rev=rev)
+  if sources:
+    dep.with_sources()
+  if excludes:
+    for exclude in maybe_list(excludes, Exclude):
+      dep.exclude(org=exclude.org, name=exclude.name)
+  lib = alias_map['jar_library'](name=name, jars=[dep])
+  if alias:
+    alias_map['jar_library'](name=alias, jars=[lib])
+  return lib

[tw-172-25-20-142 pants]$ PANTS_DEV=1 ./pants goal list examples/BUILD::
*** Running pants in dev mode from /Users/tdesai/projects/pants/src/python/pants/bin/pants_exe.py ***
Loading pants backends from source
examples/BUILD:test
[tw-172-25-20-142 pants]$

Bugs closed: 185

Reviewed at https://rbcommons.com/s/twitter/r/452/
Upgrade to com.twitter.common#jar-tool;0.1.6

This picks up a fix for moving the temporary jar file created
to it final target location when the two reside on different
filesystems.

Testing Done:
$ PANTS_DEV=1 ./pants goal binary bundle src/java/com/pants/::

Bugs closed: 193

Reviewed at https://rbcommons.com/s/twitter/r/465/
Updated build file parser error message when the same target is redefined

Testing Done:
Added a new test in test_build_file_parser.py and updated an existing one.

I tested with

PANTS_DEV=1 ./pants tests/python/pants_test/base:build_file_parser --verbose

but am currently unable to retest or run ci because of the ... untranslatable ... errors.

Bugs closed: 192

Reviewed at https://rbcommons.com/s/twitter/r/464/
Move tool handles from AndroidDistribution to AndroidTarget

The tools used to compile the targets are determined on a
target-by-target basis, and so should be a target attribute,
not a global distribution attribute.
Merge branch 'master' of https://github.com/pantsbuild/pants into android