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 worried about cases like this:
Block 
__Let foo = ...
____buf[...] = foo + 1
__Let bar = ...
____buf[...] = bar * 2

If the value from the second store is pulled outside of the letstmt, it becomes an error.