create a Package abstraction for twitter.common.python

This takes ExtendedLink and turns it into a Package abstraction.  This is
the biggest change necessary to move over to supporting both Eggs and Wheels
together.

High level code summaries:
  1. move most of http/link.py to package.py
     a. ExtendedLink -> Package
     b. SourceLink -> SourcePackage
     c. EggLink -> EggPackage
     d. a lot of s/link/package/ (accounts for most of the minor line changes.)
  2. Package .satisfies and .compatible are two separate concepts now (one is
     requirement specific, the other is platform/py version specific)
  3. Fixed Obtainer abstraction leakage and generic-ified 'package precedence'
     (this is similar to how pkg_resources does it.)
  4. Moves Platform.distribution_compatible to package.py since that's where the
     concept belongs

The only remaining CL is adding WheelPackage and it's very minor (~100 line
diff on top of this.) NOTE: this is rebased off the merge of r/86 + r/87 +
r/91.

Testing Done:
git clean -fdx && ./pants.bootstrap tests/python/twitter/pants:all -v

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