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.
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/
Merge branch 'master' of github.com:pantsbuild/pants into javadep
Upgrade jmake to 1.3.8-3, fixes issues where builds would fail when package-info.java is present.
Add package-info.java to test that it does not fail the build.

Reviewed at https://rbcommons.com/s/twitter/r/457/
Merge branch 'master' of github.com:pantsbuild/pants into javadep
Push down compute_classpath_elements_by_class specifics to java_compile.py. This allows us to pick up scala classes that otherwise incorrectly would be reported as nonexistent