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. 
This doesn't do the trick. A block separates two Stmts. Load is not a Stmt, so l will always be NULL. You need to check if op->first contains a Load from the buffer in question using an IRVisitor. LetStmts wrapped around the stores would also need checking, and if there are multiple realizations of one Func this code looks like it will incorrectly aggregate all of them. It should bail out if it hits a for loop.

Also, this is going to lift Stores nodes outside of the LetStmts that may be necessary to define Vars in the store nodes.

Also, this doesn't actually mutate the IR, so this class should be an IRVisitor, not an IRMutator.