Interleave multiple vectors

This pull request replaces the "Deinterleave powers of 2" request. I have added the ability to interleave an arbitrary number of vectors. We can deinterleave ramp indices that use / or % with constant values up to 4. Additionally, we can detect multiple strided stores in a block and determine if they can be replaced by a single interleaved store. CodeGen_ARM was updated to call the builtin vst instructions for interleaved stores from 1 to 4 vectors. A general purpose interleave_vectors function was added to CodeGen that generates decent llvm code in the general case. 
I thought it felt strange to have a nested if statement that referred to the same variable. i.e.

if (okay_to_deinterleave) {
....
  if (okay_to_deinterleave) {
  ....
  }
}