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. 
Actually, I think that I do want StoreCollector to be an IRMutator, because it returns the Stmt with all the collected Stores removed. After running the collector I still decide whether or not to use the mutated Stmt, but if I make this a visitor, then I would need another pass through the tree to remove the collected stores.