Partially evaluate type class dictionaries

All constraints are assumed to be 'static' so functions with type class
constraints will now be monomorphised, ultimately.

(I should add a flag to turn partial evaluation off, shortly, in case
this is not wanted, or too slow...)
Optimisation options

--partial-eval and --no-partial eval (former is the default)
-O[0-3] now set packages of optimisation options (although the only one
currently existing is partial-eval, which is set at levels >=2)
Default -O2
Merge pull request #1659 from edwinb/partial-eval

More partial evaluation goodness