Add -package-id, improve package shadowing behaviour and error messages
A few changes bundled together here:
- Add -package-id flag, like -package but takes an
InstalledPackageId as an argument (mainly for Cabal)
(docs to follow)
- Fix the shadowing behaviour: if we end up with
two packages with the same name/version that came from
different package databases, then one will shadow the
other. This may mean we have to disable other packages
that depended on the now-shadowed package. Lots of
refactoring to ensure that we can get reasonable diagnostics when
this happens
<command line>: cannot satisfy -package shadowdep:
shadowdep-1-XXX is unusable due to missing or recursive dependencies:
shadow-1-XXX
(use -v for more information)