Add support for running a command before tests.

This depends on https://rbcommons.com/s/twitter/r/1177/

Testing Done:
Ran new test.

Reviewed at https://rbcommons.com/s/twitter/r/1179/
Fix problem parsing stuff like options: --compile-java-args='-target 7 -source 7' in pants.rc files

Testing Done:
Ran new tests

Reviewed at https://rbcommons.com/s/twitter/r/1192/
Migrate all JvmTasks to use the new options system.

The common --jvm-options, --args, --debug and --confs flags now
live in the base class, but this required migrating all the
relevant tasks at once, hence the scope of this change.

This also gets rid of manual flag-to-config fallback, as the new
options system does this automatically. However this required some
changes to section and key names in pants.ini. I'm documenting
these changes in a spreadsheet, for smooth config migration in
pants install bases.

This required breaking a couple of inconsistently named flags, e.g.,
--benchmark-caliper-args is now just --benchmark-args.

Testing Done:
CI passed.

Manually tested that new flags and config settings work.

Reviewed at https://rbcommons.com/s/twitter/r/1186/
A simple script to detect unmigrated config keys.

Future changes that modify config keys should add the migration
to this script.

Reviewed at https://rbcommons.com/s/twitter/r/1195/
Provides documentation for some of the properties and methods in target.py

The type annotations help when using an IDE like IntelliJ

Testing Done:
There should be no code changes.  running CI

Bugs closed: 707

Reviewed at https://rbcommons.com/s/twitter/r/1196/
Print a diagnostic if a BUILD file references a source file that does not exist

Testing Done:
Edited a BUILD file, added a reference to a source file that does not exist.

```
diff --git a/src/python/pants/backend/core/BUILD b/src/python/pants/backend/core/BUILD
index 2da9682..8b1e827 100644
--- a/src/python/pants/backend/core/BUILD
+++ b/src/python/pants/backend/core/BUILD
@@ -4,7 +4,7 @@

 python_library(
   name = 'plugin',
-  sources = ['register.py'],
+  sources = ['register.py', 'does-not-exist.py'],
   dependencies = [
     'src/python/pants/backend/core/targets:all',
     'src/python/pants/backend/core/tasks:all',

```

Before this change, when running

```
PANTS_DEV=1 goal test tests/python/pants_test:all
```

the build would end with an error but not give any further information:

```
Exception message: [Errno 2] No such file or directory
```

After this change, you now get a diagnostic message that gives you a hint why the test failed:

```
 ERROR] Failed to copy src/python/pants/backend/core/does-not-exist.py for library PythonLibrary(BuildFileAddress(/Users/zundel/Src/pants/src/python/pants/backend/core/BUILD, plugin))

               FAILURE

Exception message: [Errno 2] No such file or directory
```

Reviewed at https://rbcommons.com/s/twitter/r/1198/
Fix all uncompressed artifacts stored as just '.tar'

Testing Done:
https://travis-ci.org/pantsbuild/pants/builds/38738752

Reviewed at https://rbcommons.com/s/twitter/r/1197/
configurable compression level