Allow functions to be declared as error handlers
Fix comment syntax for highlighting
Add ErrorHandler Binary instance
Proper checking for language extension
Add a Cabal library

Moves Core to Idris.Core

The library allows using the Idris' backend from other Haskell code.
For example, we could use Idris as a general TT compiler with multiple
backends:

    run :: Idris ()
    run = do
      let ddir = "libs" -- TODO: Use Idris.Util
      addImportDir $ ddir </> "prelude"
      addImportDir $ ddir </> "base"
      elabPrims
      _ <- loadModule stdout "Builtins"
      _ <- loadModule stdout "Prelude"
      pterm <- fmap (flip delab program) getIState
      elabDecls toplevel [makeDecl pterm]
      compile ViaNode "wow.js" runProgram

Everything but Main, Util, Pkg and Paths_idris is currently exported.
Merge branch 'master' into cabal-library

Conflicts:
	idris.cabal
Move externally useful Util.System functions to IRTS.System

Functions moved:

* getTargetDir
* getCC
* getLibFlags
* getIdrisLibDir
* getIncFlags
* getMvn
* getExecutablePom
Merge remote-tracking branch 'origin/error-reflection' into error-reflection
Allow querying the registered error handlers
Merge branch 'master' into cabal-library

Conflicts:
	src/Idris/DataOpts.hs
Check the type of elaborated error handlers
Show Git revision IDs in pre-release versions

A new Cabal flag `release` is added, and is off by default.

When the flag is on, version strings show the version from
idris.cabal. When the flag is off, version strings are given a
prerelease suffix. If the build system can determine the short Git hash
for HEAD, then this is the suffix. If it cannot, then the suffix is a
generic "-PRE" suffix.
Fix LLVM compilation error because of moved `getCC`
Allow the executor to call foreign functions that return possibly-null strings.
Add regression test for possibly-null foreign strings in the executor
Add missing regression tests to idris.cabal
Add a function for dealing with absurdity

Now, if a type is known to be uninhabited, `absurd` will immediately
find the proof of uninhabitedness and apply `FalseElim` to it. This can
inhabit any type.

Example:

    foo : Fin Z -> String
    foo f = absurd f
Monad/Applicative/Functor instances for Eff

So now you can use it in a Monad transformer if you really want to.
Add more isomorphisms

Specifically:
 * Congruence over products and sums
 * Congruence over Maybe
 * Demonstrate isos of Maybe using sum and unit isos
Weakening and shifting of Fins

Add two functions:
 * weakenN weakens a Fin n m times
 * shift adds a Nat to a Fin, extending the bound