Respect package visibility when deciding wired in packages.
Respect package visibility when deciding wired in packages.

Summary:
Previously, we would consider ALL versions of a wired-in package,
no matter if they were exposed or not, and pick the latest version.
This patch is a minor refinement on the behavior: now we try to
pick the wired in package from just the list of exposed packages,
and if there are no candidates fall back on the full list.  This
means that if you do:

    -hide-all-packages -package wired-in-OLD-VERSION

it will actually work by default (whereas previously you needed
to *explicitly* -ignore-package the newer version).  This is especially
useful for the 'ghc' package.  Fixes #9955.

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

Test Plan: validate

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: carter, thomie

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

GHC Trac Issues: #9955

(cherry picked from commit 1f1595195443700b7c2708fa903969fa2f0a927b)

forked-upstream-packages-for-ghcjs/ghc,forked-upstream-packages-for-ghcjs/ghc,nathyong/microghc-ghc,nathyong/microghc-ghc,forked-upstream-packages-for-ghcjs/ghc,forked-upstream-packages-for-ghcjs/ghc,forked-upstream-packages-for-ghcjs/ghc,nathyong/microghc-ghc,forked-upstream-packages-for-ghcjs/ghc,nathyong/microghc-ghc,nathyong/microghc-ghc,forked-upstream-packages-for-ghcjs/ghc,nathyong/microghc-ghc,nathyong/microghc-ghc