Coffee can now autotune kernel variants

The main feature brought by this pull request is an autotuner, which can be turned on as one can expect:
```
parameters["coffee"]["autotune"] = True
```
If the autotuner is turned on, coffee will spend some time (order of seconds) trying to understand what's the best kernel implementation for a given form. It will try the usual optimizations, in combination with manual unrolling and loop permutation (i.e. the autotuner allows us to explore a much larger space of variants). 

We all also fix some bugs concerning code generation.
Is it worth having a dedicated exception type for COFFEE?