Compute cached

I have a couple more things to do, but I think it is worth starting the review process on the new memoize scheduling directive.
It's safe to assume produce and consume are defined. These are always defined in a Pipeline, and mutate isn't generally supposed to return an undefined Stmt