Implement an autotuner in COFFEE

The autotuner evaluates the licm, ap, vect, split, and blas
optimizations by running them on a fake mesh (i.e. kernels are invoked a
number of times, but the actual fields are not read from a real mesh).
When licm and split are evaluated, assembly and integration loops are
also unrolled in several ways (this is driven by some heuristics).
Finally, the fastest optimization is picked and proper code is
generated.
Split now properly update expressions dictionary
Change the way applied optimizations are tracked
Bug fix: buffer properly passed to addto_scalar
Autotuner requires explicit setting of unroll optimization
Implement loop permutation and transposition of storage layout
Avoid aligning buffers which are not multiple of vect length
Avoid adjusting bounds where dangerous
Force simdization of loops with a pragma
Force function inlining with the intel compiler
Autotuner: change default test cases
Autotuner: now possible to output only 3 most important variants
Create constant temporaries while expanding
Autotuner: align only arrays multiple of vector length
Increase stack size if kernel is too big
Autotuner: code clean up
Dump autotuning info only on rank 0 and debug mode
Merge pull request #383 from OP2/coffee-autotuner

Coffee can now auto tune kernel variants by setting:

  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).

Also fixes some bugs concerning code generation.