IvyResolve refactor and bootstrap phase

* Refactor IvyResolve primary into IvyUtils and Task.ivy_resolve
* Add a bootstrap phase, currently only with the Task BootstrapJvmTools
* Relax the has_sources requirement of VersionedTarget, so we can
invalidate and put JarDependencies into the artifact cache
* Allow workunit_factory as param to NailgunTask.runjava and
runjava_indivisible.  This is to allow them to be used anywhere one
might use their equivalent functions in binary_util.

Auditors: benjy
Move JavaCompile to new tool bootstrapper

Auditors: benjy

Conflicts:
	BUILD.tools
Move ScalaCompile over to new tool bootstrapping

Also refactor zinc_utils to access any necessary tool classpaths
lazily

Auditors: benjy
Move AntlrGen over to new tool bootstrapping

Auditors: benjy
Move BenchmarkRun to new tool bootstrapping

Auditors: Benjy
Move Checkstyle to new tool bootstrapping

Auditors: benjy
Move NailgunTask to new tools bootstrapping

Auditors: benjy
Move JUnit to new tools bootstrapping

Auditors: benjy
Move SpecsRun to new tools bootstrapping

Auditors: benjy
Small style tweaks (PEP8)

Auditors: benjy
Small fixes and comments related to bootstrap phase

Auditors: benjy
Move scala-repl over to new tools bootstrapping

Auditors: benjy
Small tweaks to fix ide_gen goals.

Also error on trying to resolve an empty toolset.

Auditors: benjy
Change ValueError to TaskError

Auditors: benjy
Add missing import in ivy_resolve

Auditors: benjy
Pass a java runner through IvyUtils.mapjars

Auditors: benjy