Implement "reexported-modules" field, towards fixing GHC bug #8407.

Hello lovely Cabalites. I have a preliminary patch for enabling module-reexports (https://ghc.haskell.org/trac/ghc/ticket/8407). This patch doesn't really do anything without the companion changes to ghc-pkg and GHC, but I'd like to get the review process rolling.

Re-exported modules allow packages to reexport modules from their
dependencies without having to create stub files.  Reexports of the same
original module don't count as ambiguous imports when module finding
occurs.

Here are the known TODO items:

TODO: Add some validation checks for the field, e.g. duplicates,
self-referential, etc. Please let me know if there are other validation checks you would like.

TODO: Syntax bikeshedding.  Implemented syntax:

    Exported:pkg:Orig

but this is not very good.

Here is a syntax proposal:

    "pkg" Orig as Exported

...with some syntax sugar for certain cases. When Exported = Orig:

    "pkg" OrigName

(Unimplemented) Have Cabal figure out which package to use:

    OrigName

Other syntax proposals welcomed.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>