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'd feel a lot better about most of the code in this pull request if we had tests for more of the special cases. This tests the general case, but there are also special cases for 2, 3, 4 way interleaves that we aren't exercising (at least, not in this test). It might also be worth having a power of 2 test for the general case (8?)