Optimizations

Added common optimization levels (0, 1, 2, 3) to the LLVM IR generator, which can be set with the command line flag "-O". 

The benchmarks script has been modified to use this optimizations levels, and it can be invoked  with "make benchmark", "make benchmark-O1", "make benchmark-O2" and "make benchmark-O3", setting the optimization flags in the LLVM IR generator as well as in the C and Ada compilers.

In the process, the makefile rules has been refactored removing code duplication.