Handle lambdas better in sufficient condition extraction.
Fix issues related to computing too little of the SCTable.

We now compute a bit too many sufficient conditions, but it at least
means that we can handle the running example.
Add range tracking across filter.
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...
Remove trace import.
Export way to rename just a single function.
Only apply algebraic simplifier on integer expressions.
Make sure extracted predicates are uniquely named.
Fix typo causing memory corruption when compiling concats.
Improve performance of UsageTable.contains.
Remove unnecessary use of patNameSet.
Make UsageTable.without faster.
Improve performance of simplification engine slightly via caching.

Specifically, we now cache the queries for free names in expressions.
Make fusion3 test runnable.
Fix issue with shape functions.

The problem is that assertions would sometimes be optimised out.  The
solution is a bit of a hack, though.
Change SubExps constructor to SubExp.

The former was just a potential source of mischief, with the dubious
benefit of being slightly more expressive.

I also took out the "alternatives expression" support in the hoister.
It had been dead code for a while, since we originally used it to
remove fusion nuisances, but that is now handled in a different way.
Change = operator to ==.
Put all optimisations in same subdirectory.