commandline-documentation: Add `notes` field to commands

- modify any existing commands appropriately
  (move certain contents from the commandDescription to commandNotes)
- modify the `commandHelp` function: reorder the help texts:
  synopsis - usage - description - flags - notes
commandline-documentation: Refactor, purely

- remove makeCommand smart constructor
  (commands are easier to read/handle that way)
commandline-documentation: Rewrite/Add texts for many commands
commandline-documentation: Add and Modify two paragraphs
commandline-documentation: Add some relevant-config-keys
Fix comments in cabal-install/Main.hs
commandline-documentation: Change UserHooks description
commandline-documentation: More description to user-config command
Merge branch 'master' into documentation

Conflicts:
	cabal-install/Distribution/Client/Setup.hs
	cabal-install/Main.hs
Change globalCommands description generation

- previously, runCommands internally modified the description
  by adding the list of commands.
- now, globalCommands is a function that builds the complete
  description without need for changes during runCommands invocation.
- slightly more code duplication, but better separation of concerns
commandline-documentation: Add structure to command listing in `cabal help`
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.