make Globals more like Dats

Implement trivial indexing and duplication on Global so it can be used
in places where a Dat is used. This is needed to make the Real
function space work in Firedrake.
ensure the data is up to date
Always mark COFFEE CPU kernels as static inline
Remove unnecessary static inline markers from Kernels

Since COFFEE now always slaps a static inline declaration onto CPU
kernels, there's no need to add them by hand to each Kernel we build.
Merge pull request #393 from OP2/cpu_static-inline

Always mark COFFEE CPU kernels as static inline
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