Remove needless map in Core/TT

Fixes #608
Strictness improvements

Add 'NFData' instances (autogenerated using 'derive') to force complete
evaluation. Also make the context and case trees strict, since they
need to be evaluated fully when writing out the intermediate file.

Fixes #559
Don't allow matching on functions without justification

Otherwise we have patterns which type check, and which are considered
total, but which can't be properly check at run-time.

Fixes #138
Update CHANGELOG
Use _ if all alternatives are unmatchable
Library changes: Please read details below!

Builtins now contains only those things required to support builtin
syntax. Everything else moved into Prelude, which has been reorganised
a little (extra files for Bool, Classes and Basic functions such as
id and composition).

New --nobuiltins flag, which is intended only to built the Builtins
module. --noprelude now loads Builtins. --nobuiltins implies
--noprelude.

NOTE: You may need to delete the libs/ directory and check it out again
to be sure there are no stale ibc files (we really need to fix the
build process!)
Make sure mpz_t is defined
Remove needless Prelude imports
Add --nobasepkgs flag

Intended for use when building the base packages, so that they don't
look at installed versions. Simply removes 'prelude' and 'base' from
the package list.
Report errors directly, instead of parsing the string given to ihputStrLn

Still use string parsing for parse errors (there must be a better way to get the source location of a parse failure)
Fix error reporting: use the right id to report back by installing
a catch block just after the id is set in the IState record
Merge pull request #661 from markuspf/bits-const-fix

Make sure mpz_t is defined
Merge pull request #662 from hannesm/error-cleanup

Error cleanup
More flexible type class instances (on functions)

Supports this sort of thing:

  instance Functor (\x => Int -> x) where
    map f intf = \x => f (intf x)

  instance Applicative (\x => Int -> x) where
    pure v = \x => v
    (<$>) f a = \x => f x (a x)

  instance Monad (\x => Int -> x) where
    f >>= k = \x => k (f x) x
Improve type class overlap check

Normalise before checking - store type class instances in normal form.
Fixes #249
Tweak reduction rules for private/abstract names

It is better if private names reduce during typechecking (since such
things arise in public functions which should reduce completely) and
only abstract names are prevented from reducing.

Fixes #348
Remove some of the more easily avoided %assert_totals
Use toNat to avoid %assert_total when negative Int is treated the same as 0.
Replace some Heap proofs with impossible.
Turn off optimisations when compiling parser

Disabling optimisations in Parser and ParserExpr allows to compile
these modules in a matter of seconds. It also doesn't seem to
affect compilation times of Idris programs.