Added a case to deinterleave that works when transposing fixed sized blocks of data. In this case we can safely interleave if the collected stores have unit stride, and each store is simply a load with a stride equal to the vector width. Adding this case makes this optimization a little easier to trigger when doing a simple transpose.
Added a performance benchmark for vectorizing transposition of fixed sized blocks.
Modified block_transpose performance test to ouput assembly code for each different algorithm.
Added a block flattening mutator that converts blocks of blocks into a single block of instructions.
Reverted some changes to fft performance test that were left in there during debugging.
Cleaned up the code in Deinterleave.cpp to reduce the amount of code repetition between branches. Added a correctness test to the transpose testing in addition to detecting actual use of the interleave_vectors call.
Adding missing files that implement the flatten_blocks mutator.
Fixed some minor issues in the building of test_interleave involving comparison of signed and unsigned ints.
Fixed an issue in the block flattening visitor that was not handling recusrion correctly.
Added a comment to the BlockFlattener mutator to clarify how the recursive flattening works.
Merge branch 'master' into symmetric_interleave

Conflicts:
	Makefile
Added BlockFlattening.h/cpp.
Merge branch 'symmetric_interleave' of https://github.com/halide/Halide into symmetric_interleave
Some small fixes to BlockFlattening. All tests pass now.
Merge branch 'master' into symmetric_interleave
Fixed a memory bug in the Interleaver mutator.
Added some rules to apps/support/Makefile.inc to better handle llvm version inline with how things are done in the top level makefile.
Merge pull request #510 from halide/symmetric_interleave

Added a case to deinterleave that works when transposing fixed sized blo...