Push group handling into GroupTask.

This eliminates knowledge of groups from the core Engine
implementations and isolates their handling to a specialized
GroupTask that delegates to GroupMembers each producing the
same product type.

This also eliminates the trace of groups in every Task's
execute signature which now no-longer takes targets.  Tasks
instead get the targets they need from the context uniformly.

Finally, a prepare lifecycle method is added to the base task
interface.  Today this is called lockstep after the contructor
by the core engine, but in the future it will be where things
like product requirements are registered.

Testing Done:
Unit:
=====
$ PANTS_DEV=1 ./pants tests/python/pants_test:all

Group in the field:
===================
$ PANTS_DEV=1 ./pants goal test tests/{java,scala}:: -ldebug

Grouped flags maintain their old spelling - they are displayed in 1 section though:
==========================================
$ PANTS_DEV=1 ./pants goal help compile
...
jvm options:
  --compile-apt-warnings, --no-compile-apt-warnings
                          [True] Compile with all configured warnings enabled.
  ...
  --compile-apt-args=JAVA_COMPILE_ARGS
                          Pass these extra args to javac.
  --compile-java-warnings, --no-compile-java-warnings
                          [True] Compile with all configured warnings enabled.
  ...
  --compile-java-args=JAVA_COMPILE_ARGS
                          Pass these extra args to javac.
  --compile-scala-warnings, --no-compile-scala-warnings
                          [True] Compile with all configured warnings enabled.
  ...
  --compile-scala-plugins=PLUGINS
                          Use these scalac plugins. Default is set in pants.ini.

Explain still ~works:
=====================
$ PANTS_DEV=1 ./pants goal test tests/{java,scala}:: --explain
*** Running pants in dev mode from /home/jsirois/dev/3rdparty/jsirois-pantsbuild-pants/src/python/pants/bin/pants_exe.py ***
Phase Execution Order:

bootstrap -> gen -> check-exclusives -> resolve -> compile -> resources -> test

Phase [Goal->Task] Order:

bootstrap [bootstrap-jvm-tools->BootstrapJvmTools]
gen [thrift->ApacheThriftGen, scrooge->ScroogeGen, protoc->ProtobufGen, antlr->AntlrGen]
check-exclusives [check-exclusives->CheckExclusives]
resolve [ivy->IvyResolve]
compile [jvm->SingletonGroupTask]
resources [prepare->PrepareResources]
test [junit->JUnitRun, specs->SpecsRun]

Although "compile [jvm->SingletonGroupTask]" doesn't say all it could, I'm willing to live with that for now if you all are.

Bugs closed: 167, 171

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