Factor in the jvm version string into the nailgun executor fingerprint

In some configurations, the path to the 'java' executable stays the same but can be manipulated to a different version via a symlink or environment variable.
This causes a mismatch between the already running nailgun server and the jvm that Pants thinks it has chosen.

Testing Done:
Manual testing to make sure that ng servier is killed if symlink to java executable is changed.

Writing a unit test for this looked prohibitivly difficult.

Bugs closed: 639

Reviewed at https://rbcommons.com/s/twitter/r/1122/
Memoize fingerprints by the FPStrategy hash

* Force __hash__ and __eq__ to be defined for FingerprintStrategy
  subclasses.
* Fix implementations of Target.{transitive_,}fingerprint and existing
  FingerprintStrategy subclasses.

Testing Done:
CI is clean at https://travis-ci.org/pantsbuild/pants/builds/37204281

Reviewed at https://rbcommons.com/s/twitter/r/1119/
Memoize Address.__hash__ computation.

I noticed during profiling that it is a major hotspot and a very easy
change.  This is unsurprising: addresses are dictionary keys for many of
the fundamental structures in pants.

Also move spec_path and target_name to private variables exposed via
properties, per Eric's suggestion.