Preliminary support for compiling signature files, using --instantiate-with

There's no chrome here, but some of the guts for Cabal supporting compiling
signatures.  The key UI is a new --instantiate-with flag for ./Setup (no support
cabal-install side!) which properly modifies the package key, calculates extra
hole dependencies for a package, and ensures an appropriately
translated -sig-of is passed to GHC.  The UI here is supremely user-unfriendly:
the intent is that users will use cabal-install to calculate these parameters
for them.

ToDo: Cabal's inconsistency check in ./Setup needs to be adjusted to be
less zealous.

I'm hoping to get this in prior to the GHC feature freeze, since GHC needs some modifications to take advantage of this.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Any chance we can move this into its own function, like some of the other self-contained, this function is a monster as it is.