Alloca promotion pass not coping with mode where array is loaded or saved into value as an array
aggregate and accessed using ExtractValue and InsertValue
This fixes the problem for the cases submitted with the bug, and also makes the routine more
graceful in situations it can't handle - in which case it will back-off the vectorization.
The function to attempt vectorization has been re-factored and split into several functions to make
it clearer what is happening.
Also added some test cases for the new modes.