Dynamic scheduling

This PR implements the "dynamic scheduling" feafure, which can be enabled with the new ```func.compute_lazy()``` call. Dynamic scheduling at coarser than pixel-granularity is not supported -- the implementation for it which is unsound in some cases is present, but disabled by a compiler error in ```Lower.cpp```.

The project writeup associated with this work can be found at: http://www.contrib.andrew.cmu.edu/~bblum/15869-report.pdf

Note that there is one case I know of where potentially unsafe code involving parallel/vectorized loops would be wrongly accepted, indicated in my comment below.