Added benchmark target to maven_layout()

Testing done:
https://travis-ci.org/pantsbuild/pants/builds/31105013

Reviewed at:
https://rbcommons.com/s/twitter/r/780
Fix exit status

Testing Done:
Ran a failing pants bootstrap; checked $?

Reviewed at https://rbcommons.com/s/twitter/r/779/
OSX 10.10

Some users have begun beta testing OSX 10.10 internally.

Reviewed at https://rbcommons.com/s/twitter/r/789/
Added a --spec-exclude command line flag to exclude specs by regular expression.

Multiple expressions can be specified by setting the flag more than once. This is in the same
vein as Eric's earlier work on excluding specs with the ^ expression, but this is more powerful
in that it (a) uses regexes, and (b) is an actual flag, and can therefore be specified in
.pants.rc.

Prompted by the need to exclude some automatically generated targets we have internally.

Most of the diff is test code; actual changes are pretty small.

Testing Done:
Wrote tests in pants_test/commands/test_spec_exclude_integration.py (which pass).

Bugs closed: 391

Reviewed at https://rbcommons.com/s/twitter/r/747/
Added an excludes attribute that is set to an empty set for all SourcePayload subclasses.

See github issue https://github.com/pantsbuild/pants/pull/414.

Testing Done:
ci passed @ https://travis-ci.org/pantsbuild/pants/builds/31232287

pants goal idea src/thrift:: brings up the IDE and puts the source dirs on the content root.

Bugs closed: 414

Reviewed at https://rbcommons.com/s/twitter/r/793/
Added some docs and a bugfix on debugging a JVM tool (like jar-tool or checkstyle) locally

Testing Done:
To test the new debugging tool, I edited pants.ini as follows:

[jar-tool]
    jvm_args: ['-Xmx300m', '-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=%(debug_port)s']

Then attached to it with IntelliJ using a remote debug config for the twitter-commons repo

Bugs closed: 413

Reviewed at https://rbcommons.com/s/twitter/r/791/
Relativize classpath for non-ng java execution

-Factored the classpath relativization logic into it's own module and reworked it slightly.
-Made jmake relativize classpath in addition to the nailgun executor

The jvm_utils BUILD file has an empty dependencies key to follow the convention I found in another file.

Testing Done:
Ran a java/scala test target with nailgun enabled/disabled and made sure the classpath was minimized and the tests passed.

Reviewed at https://rbcommons.com/s/twitter/r/804/
Fixup JvmCompile to always deliver non-None products that were required by downstream.

This change augments GroupTask with a pre_execute complement to post_execute and
uses this lifecycle point to ensure JvmCompile delivers on its promise of supply product maps
regardless of the availability of chunks in the round.  Further adds tests for the new lifecycle
as well as coverage for pre-existing un-tested always-run semantics of construct, prepare and
post-execute.

Testing Done:
Travis CI went green here: https://travis-ci.org/pantsbuild/pants/builds/31199740

Also:
==
$ PANTS_DEV=1 ./pants goal test tests/python/pants_test/tasks/:group_task --test-pytest-options=-v
...
21:12:20 00:01   [test]
21:12:20 00:01     [pytest]
21:12:20 00:01       [run]
                     ============== test session starts ===============
                     platform linux2 -- Python 2.6.9 -- py-1.4.22 -- pytest-2.6.0 -- /usr/bin/python2.6
                     plugins: cov, timeout
                     collected 5 items

                     tests/python/pants_test/tasks/test_group_task.py@57::GroupIteratorSingleTest::test PASSED
                     tests/python/pants_test/tasks/test_group_task.py@73::GroupIteratorMultipleTest::test PASSED
                     tests/python/pants_test/tasks/test_group_task.py@179::GroupTaskTest::test_groups PASSED
                     tests/python/pants_test/tasks/test_group_task.py@232::EmptyGroupTaskTest::test_groups PASSED
                     tests/python/pants_test/tasks/test_group_task.py@263::TransitiveGroupTaskTest::test_transitive_groups PASSED

                     ============ 5 passed in 0.17 seconds ============

And tested this change live against an internal use-case that was failing before this as such:
==
...
  File "/Users/david/.pex/install/pantsbuild.pants-0.0.21-py2-none-any.whl.0ce746980853d744737145525a44d8f91b0c5d84/pantsbuild.pants-0.0.21-py2-none-any.whl/pants/engine/round_engine.py", line 42, in attempt
    task.execute()
  File "/Users/david/.pex/install/twitter.common.pants-0.4.0-py2-none-any.whl.e1f378c90f5282b48c1ebc94c79373050751b771/twitter.common.pants-0.4.0-py2-none-any.whl/twitter/common/pants/jvm/args/tasks/resource_mapper.py", line 99, in execute
    self._add_args_resources(target, resources_by_target, transitive=False)
  File "/Users/david/.pex/install/twitter.common.pants-0.4.0-py2-none-any.whl.e1f378c90f5282b48c1ebc94c79373050751b771/twitter.common.pants-0.4.0-py2-none-any.whl/twitter/common/pants/jvm/args/tasks/resource_mapper.py", line 118, in _add_args_resources
    collect_resource_dirs(target)
  File "/Users/david/.pex/install/twitter.common.pants-0.4.0-py2-none-any.whl.e1f378c90f5282b48c1ebc94c79373050751b771/twitter.common.pants-0.4.0-py2-none-any.whl/twitter/common/pants/jvm/args/tasks/resource_mapper.py", line 110, in collect_resource_dirs
    mapping = classes_by_target.get(tgt)
AttributeError: 'NoneType' object has no attribute 'get'

Notably, this is the t.c.pants args-apt plugin [1] and it requires 'classes_by_target' [2], but gets None [3] prior to this fix.
[1] https://pypi.python.org/pypi/twitter.common.pants/0.4.0
[2] https://github.com/twitter/commons/blob/master/pants-plugins/src/python/twitter/common/pants/jvm/args/tasks/resource_mapper.py#L89
[3] https://github.com/twitter/commons/blob/master/pants-plugins/src/python/twitter/common/pants/jvm/args/tasks/resource_mapper.py#L105

Bugs closed: 415

Reviewed at https://rbcommons.com/s/twitter/r/794/
Create a mixin for "quiet tasks".

This separates the two concerns formerly handled by ConsoleTask:
being quiet, and being a task whose primary job is to print to the console.

Now you mix in QuietTaskMixin for the first, and extend ConsoleTask
(which itself mixes in QuietTaskMixin) for the second.

This rids us of silliness such as the clean-all task having a flag
to specify its output separator.
`goal repl` consumes targets transitively

- Partition by selected language vs all other languages to allow for handling of 'dependencies'/'jar_library' and other inner nodes
- Filter the entire context, rather than just target roots
- Label JarLibrary as a JVM target (and fix related fallout)

Testing Done:
new unit test
manual validation of mixed/scala/python contexts:

-----
PANTS_DEV=1 ./pants goal repl src/scala/com/pants/testproject/unicode
...
scala> com.pants.testproject.unicode.shapeless.ShapelessExample.greek()
res1: String = shapeless success
-----
PANTS_DEV=1 ./pants goal repl src/python/example/hello/greet
...
>>> from example.hello.greet.greet import greet
>>> greet("yo")
u'\x1b[32mHello, yo!\x1b[0m'
-----
PANTS_DEV=1 ./pants goal repl src/scala/com/pants/testproject/unicode src/python/example/hello/greet
...
FAILURE: Mutually incompatible targets specified: PythonLibrary(BuildFileAddress(/Users/stuhood/src/pants/src/python/example/hello/greet/BUILD, greet)) vs ScalaLibrary(BuildFileAddress(/Users/stuhood/src/pants/src/scala/com/pants/testproject/unicode/shapeless/BUILD, shapeless))
-----

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