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.
* Remove the name() classmethod on FPStrategy.  Its only use can be
  replaced with type(self).__name__.