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. 
Ooops, I forgot that a Load is a Expr. I will fix that and change StoreCollector to an IRVisitor. But, I've been thinking about the For loop case, where the Store needs the loop variable and the issue with a LetStmt defining a Var needed by the Store. In these cases I think we are still okay, because the Store collector only collects nodes with ramp indices of constant stride. Then after collecting these nodes I require the difference of the bases of these ramps to be constant. So if a loop var or let var is used in the Store this condition would not be met, and I would end up not reordering the Stores. Chances are if we find a Let or a For before collecting all the Stores, we'll want to bail out anyway, but I think technically we should be okay.