Support ghc-pkg --ipid to query package ID.

Summary: Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>

Test Plan: validate

Reviewers: hvr, simonmar, austin

Subscribers: simonmar, relrod, carter

Differential Revision: https://phabricator.haskell.org/D98
(WIP) Package keys, plus a raft of error reporting refactoring

Summary:
This patch set makes us no longer assume that a package key is a human
readable string, leaving Cabal free to "do whatever it wants" to allocate
keys; we'll look up the PackageId in the database to display to the user.
This also means we have a new level of qualifier decisions to make at the
package level, and rewriting some Safe Haskell error reporting code to DTRT.

Additionally, we adjust the build system to use a new ghc-cabal output
Make variable PACKAGE_KEY to determine library names and other things,
rather than concatenating PACKAGE/VERSION as before.

Adds a new `-package-key` flag to subsume the old, erroneously named
`-package-name` flag.

RFC: Perhaps the flag should be called -current-package-key (so that we
can use -package-key to load packages by key?

RFC: The md5 hashes are pretty tough on the eye, as far as the file
system is concerned :(

ToDo: Figure out what to do with the funny case of mutual recursion in Packages

ToDo: Fix warnings and validate

ToDo: Fix code duplication for pkg_qual logic.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>

Test Plan: validate

Reviewers: simonpj, simonmar, hvr, austin

Subscribers: simonmar, relrod, carter

Differential Revision: https://phabricator.haskell.org/D80

Conflicts:
	compiler/main/Packages.lhs