Specialize

The specialize branch has stabilized and I believe it works. Time for code review. Suggestions for tricky corner cases to test are very welcome, because this is a powerful feature with potentially far-reaching effects.

For those who haven't been following: This branch lets you write several different schedules for a Func, and switch between them at runtime based on some bool condition, e.g. input.width() < 10.
I think was debugging some other include issue. I've checked and the reordering makes no difference.