More COFFEE features

We add a number of features:
- the autotuner now does not produce a shared object, rather a "main" C file. This is because apparently "dumping" too many code variants in an .so (so generating a big file) induces something in the compiler (at least Intel's) which renders the run-times completely unreliable. I tried debugging the thing (with the help of Francis as well), changing compiler options etc. Can't really understand what's going on, so here's a fix. Also, this makes COFFEE less dependent on PyOP2 (it doesn't need the compilation module anymore), which is a good thing in perspective.
- depending on pull request #55 in mapdes/ffc, COFFEE now performs symbolic execution to restructure iteration spaces such that computation over blocks of zero-columns are avoided
- precomputed terms induced by loop-invariant code motion can now be fused in the same loop (e.g. if test and trial functions come from the same iteration space)
- minor fixes around
I assume it's intentional the level 3 and 4 optimisations are mutually exclusive?