add JavaScriptFFI known language extension
add GHCJS compiler flavor
Add support for derived compilers to CompilerId

When a compiler is based on another "parent" compiler and has
very similar functionality, the parent compiler field in
CompilerId can be used to make both the impl(compiler) and
the impl(parent) flags evaluate to true, each for their respective
version.

This can make conditions in packages significantly simpler.
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.