Use text header for persistent build config
getConfigStateFile: throw meaningful exceptions, recover old LBI

getConfigStateFile now throws meaningful exceptions which are caught by
tryGetConfigStateFile and friends, which are allowed to propagate,
rather than just calling 'die'. If the LocalBuildInfo was generated by
an older version of Cabal, an exception is still generated, but the
LocalBuildInfo is included if it is recoverable. This feature is used to
reduce code duplication between the library and the test suite.
Merge pull request #2261 from ttuegel/binary-lbi

Use text header for persistent build config
`setup sdist`: rearrange the arguments to 'tar' for portability.

Fixes #2258.
Redundant import.
add JavaScriptFFI known language extension
add GHCJS compiler flavor
Add the js-sources and various ghcjs-options fields to PackageDescription

This patch adds the js-sources field, for JavaScript source code
that should be included in compiled programs, similar to c-sources
for other targets.

It also adds ghcjs-options, ghcjs-shared-options and ghcjs-prof-options
and makes the underlying code for options easier to extend.
use CompilerInfo rather than CompilerId for resolving flags and
path templates.

CompilerInfo contains more information about the compiler than
CompilerId, which just stores the flavour and version. In particular,
CompilerInfo knows an AbiTag, which can be used to tell binary
incompatible results from the same compiler apart, and detailed
information about supported languages and extensions.

Some fields in CompilerInfo may be left unknown (Nothing). This can
be used in the future to allow partially resolving configurations
based on supported languages or extensions.