More partial evaluation goodness

Now works on type class dictionaries, switched on by default. Also added --no-partial-eval flag to turn all partial evaluation off if it's not wanted.

Overall effect is that we should now get much more specialisation of functions overloaded in type classes. It is also safe to mark higher order arguments as 'static' and they will be specialised as far as possible.

Any failure to make a specialised function is harmless, and fails silently (perhaps there should be a warning, or a way of marking functions as "must be specialised in the residual program", but that is for another time).