[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.