[cmp] Add InstructionAlternatives

The initial idea was to build the alternatives parsing a configuration
file but this would led to an increase of the complexity without any
evident benefit.

ITE we decided to implement statically the alternatives inside this
class.
[cmp] Add DeclareRandomizeFunction Pass

The DeclareRandomizeFunction pass is a module pass that add a funcion
declaration for the randomize funcion. randomize will generate an
integer random number between 0 and its argument (included).

In the final result this function will be used to generate the vector
of selections.
[cmp] Add InstructionAlternativeUtils

This file contains the declaration of the InstructionTy that model the
set of instruction that defines alternatives and a set of utility.

CMP_SET_ALTERNATIVE_NUMBER is a macro used to declare the number of
alternatives available for each instruction.

InitializeAlternativesVector is a TMP loop that helps in the build of the
alternative vector.
[cmp] Add AlternativesNumeberVector Pass

This pass insert a vector into the module that contains the number of
alternatives available for each instruction. This vector will be used
inside a loop that select the alternative that will be executed for
each instruction during the run.
[cmp] Initialization loop injection

Implement the steps needed to inject and initialize the choices vector.
[cmp] Add getInstTy to the utils

This function return the InstructionTy or LastInstructionTy if the
instruction declares alternatives or not.
[cmp] Add the infrastructure for alternatives a Xor implementation

To build alternatives for and instruction you need to specialize the
buildAlternatives function template. The function returns a vector
containing the alternative basic blocks.

Each block in the list miss the terminator instruction. Moreover the
last instruction in the block is considered to be the output of the
block.
[cmp] Build the list of replacement

The list contains a pointer to the instruction to be replaced and a
list of basic block semantically equivalent for each record.

When this list is empty there is no instruction that need to be
replaced with its pool of alternatives. In this case the pass doesn't
modify the function.
[cmp] Add alternative injection

InsertAlternativeBlocks takes the vector of replacements and replace
the instruction with its set of alternatives.

The alternative selection is done using a switch. Every use of the
instruction is replaced with the use of a phi node that takes its
values from the resuls of the alternatives.