Have a single internal classes dir even in a non-deployjar bundle.

This restores the status quo ante.

This turns out to make the code a lot simpler too.

The terminology 'deployjar' is confusing, so I changed the name
of the internal method deployjar() to loose_classfiles_jar(), which
is more descriptive. However I left the term 'deployjar' in the
cmd-line flag name, for backwards compatibility.
Switch pants to use the java jar-tool utility to create jars.

It turns out the java jar utility and the backing java APIs hack the zip
format to support > 2^16 jar entries in zip32 jars (pre java 7).  The
easiest way to access this functionality is to delegate to the JDK jar
APIs.

This change maintains the in-use open_jar context manager but extends
its use to all pants jar creators and updaters as well as expanding its
functionality to cover explicit support for main and classpath manfiest
entries and merging jars.

Since the new jarring uses java APIs, duplicates are explicity
forbidden and so JarRules are exposed to control handling of dups via
a new JvmBinary.deploy_jar_rules attribute and the ability to set a
global site-wide set of default jar rules.

A little test infra housekeeping - aso add a JvmToolTaskTestBase for
task tests that need jvm tool bootstrapping infra to function (most
non-console Tasks).

Testing Done:
All tests pass including JarTaskTest and JarCreateTest:
$ PANTS_DEV=1 ./pants tests/python/pants_test/:all

Manual tests using the pingpong including binary, bundle and bundle --bundle-deployjar.
Fatjar timings are ~4 times faster than old pants.

Bugs closed: 144

Reviewed at https://rbcommons.com/s/twitter/r/395/
Group JarCreate jarring actions in a jar-create MULTITOOL workunit.

Testing Done:
Before:
=======
$ PANTS_DEV=1 ./pants goal bundle --bundle-deployjar src/java/com/pants/examples/pingpong/::
...
08:04:20 00:08   [jar]
08:04:20 00:08     [jar]
08:04:20 00:08       [bootstrap-jar_tool]
08:04:22 00:10       [jar-tool]
08:04:22 00:10       [jar-tool]
08:04:22 00:10   [bundle]
08:04:22 00:10     [bundle]
                   creating dist/pingpong-bundle
...

After (note the dot per collapsed jar-tool workunit):
======
$ PANTS_DEV=1 ./pants goal bundle --bundle-deployjar src/java/com/pants/examples/pingpong/::
...
08:04:38 00:01   [jar]
08:04:38 00:01     [jar]
08:04:38 00:01       [jar-create]..
08:04:38 00:01   [bundle]
08:04:38 00:01     [bundle]
                   creating dist/pingpong-bundle

Bugs closed: 164

Reviewed at https://rbcommons.com/s/twitter/r/416/
added 'jvm_arg' option for jar-tool config in pants.ini

This does not solve issue 169, but it makes is less painful and easier to configure/diagnose.

Testing Done:
Added this to pants.ini:

[jar-tool]
jvm_args:['-Xmx257M']

I used '257' because its an unlikely value.

PANTS_DEV=1 ./pants goal ng-killall
PANTS_DEV=1 ./pants goal bundle <target>

ps auxww | grep 257M shows the NGServer process.

Bugs closed: 169

Reviewed at https://rbcommons.com/s/twitter/r/421/
Upgrade com.twitter.common#jar-tool to 0.1.5

This picks up a fix for memory leaks under nailgun's
repeated invocations of main.

Testing Done:
$ PANTS_DEV=1 ./pants goal jar src/{java,scala}:: -ldebug
...
21:01:06 00:00   [jar]
21:01:06 00:00     [jar]
21:01:06 00:00       [jar-create].DEBUG] Executing: /opt/jdk1.7.0/bin/java -Divy.cache.dir=/home/jsirois/.ivy2/twitter-commons -Xmx1g -XX:MaxPermSize=256m -Dsun.io.useCanonCaches=false -cp /home/jsirois/.ivy2/twitter-commons/org.apache.ivy/ivy/jars/ivy-2.3.0.jar org.apache.ivy.Main -settings /home/jsirois/dev/3rdparty/jsirois-pantsbuild-pants/build-support/ivy/ivysettings.xml -ivy /home/jsirois/dev/3rdparty/jsirois-pantsbuild-pants/.pants.d/ivy/4147dbb500c708344acc417e09c84556032b610c.da39a3ee5e6b#4c4fdc2a0cf8/ivy.xml -confs default -cachepath /home/jsirois/dev/3rdparty/jsirois-pantsbuild-pants/.pants.d/ivy/4147dbb500c708344acc417e09c84556032b610c.da39a3ee5e6b#4c4fdc2a0cf8/classpath.raw.tmp
.DEBUG] No ng server found with fingerprint 7ae73b6e87959b5c95b27fd71e95487367a07863, spawning...
DEBUG] Executing: /opt/jdk1.7.0/bin/java -Xmx64M -Dpants.buildroot=/home/jsirois/dev/3rdparty/jsirois-pantsbuild-pants -Dpants.nailgun.owner=/home/jsirois/dev/3rdparty/jsirois-pantsbuild-pants/.pants.d/ng/jar-tool -Dpants.nailgun.fingerprint=7ae73b6e87959b5c95b27fd71e95487367a07863 -cp /home/jsirois/dev/3rdparty/jsirois-pantsbuild-pants/.pants.d/ivy/jars/com.martiansoftware/nailgun-server/jars/nailgun-server-0.9.1.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/jar-tool/jars/jar-tool-0.1.5.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/args/jars/args-0.2.13.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/args-apt/jars/args-apt-0.1.17.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/args-core/jars/args-core-0.1.18.jar:/home/jsirois/.ivy2/twitter-commons/com.google.guava/guava/bundles/guava-16.0.1.jar:/home/jsirois/.ivy2/twitter-commons/com.google.code.findbugs/jsr305/jars/jsr305-2.0.1.jar:/home/jsirois/.ivy2/twitter-commons/commons-lang/commons-lang/jars/commons-lang-2.6.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/base/jars/base-0.0.95.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/quantity/jars/quantity-0.0.79.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/collections/jars/collections-0.0.82.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/util-system-mocks/jars/util-system-mocks-0.0.81.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/net-util/jars/net-util-0.0.84.jar:/home/jsirois/.ivy2/twitter-commons/commons-codec/commons-codec/jars/commons-codec-1.6.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/io/jars/io-0.0.56.jar:/home/jsirois/.ivy2/twitter-commons/commons-io/commons-io/jars/commons-io-2.1.jar:/home/jsirois/.ivy2/twitter-commons/com.twitter.common/logging/jars/logging-0.0.62.jar:/home/jsirois/.ivy2/twitter-commons/joda-time/joda-time/jars/joda-time-2.3.jar:/home/jsirois/.ivy2/twitter-commons/org.joda/joda-convert/jars/joda-convert-1.5.jar com.martiansoftware.nailgun.NGServer :0
DEBUG] Spawned ng server with fingerprint 7ae73b6e87959b5c95b27fd71e95487367a07863 @ 27168
DEBUG] Detected ng server up on port 59408
DEBUG] Found ng server with fingerprint 7ae73b6e87959b5c95b27fd71e95487367a07863 @ pid:27168 port:59408
DEBUG] Connected to ng server with fingerprint 7ae73b6e87959b5c95b27fd71e95487367a07863 pid: 27168 @ port: 59408
...

Bugs closed: 169

Reviewed at https://rbcommons.com/s/twitter/r/433/