Simplification and dead code elim cannot fail.
Expose facility for simplifying just one function.
Move predicate extraction to be part of the predicate optimisation.

This means that predicates are extracted after, say, inlining and
fusion.  This has not only advantages...