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