Switch from os.rename to shutil.move to support cross-fs renames when needed.

In each of these cases dst is a file or a new dir.  In these 2 cases the ouput of os.rename and shutil.move are identical (they are only different when dst is an existing dir).

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

Bugs closed: 671

Reviewed at https://rbcommons.com/s/twitter/r/1157/
A base class for tests that test a single task type.

Subclasses advertise the task type they care about in setupClass().

Deals with option registration and scoping for the task under test.

Also addresses some small code review comments from a previous commit.

Testing Done:
ci.sh passed.

Reviewed at https://rbcommons.com/s/twitter/r/1168/
Fix a test.

Should have been in the previous commit.
Move workdirs creation from __init__ to pre_execute in jvm_compile & Remove QuietTaskMixin from several tasks.

- jvm_compile creates a bunch of dirs in its __init__ method which gets wiped out by clean-all. Instead, move the dirs creation to pre_execute().
- Another issue is clean-all/clean-all-async/invalidate/ng-killall are with QuietTaskMixin, and once there is one task is QuietTaskMixin, console output will be all suppressed by reporter. This is a fairly common use of combining these goals with others like compile/publish/test/etc.

This is because we only have one reporter for all tasks. A long term solution could be that we have two reporters (or more), one for quiet or one verbose. And tasks can each use its own reporter (not sure if there is any output lineage problem if combined).

Or we can simply make these 3 tasks non quiet. Rest of the ConsoleTask(QuietTaskMixin) derived goals/tasks, their usage is generally standalone. Thus no need for changes.

Testing Done:
PANTS_DEV=1 ./pants goal test tests::

Bugs closed: 325

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