Make checking of cache explicit in TUI
Created by: mrnugget
This is based on @eseliger's idea, which was confirmed independently by @courier-new as something worthwhile.
In short: before this change we wouldn't tell users whether we have cached results and we'd only check the check once we start executing a task. The problem with that is that if you have 500 tasks to execute, 480 of which are cached, the UI would tell you "executing 4/500 tasks" and then only speed up once it gets to the cached values.
This PR here pulls the cache-checking out of the task execution and makes it a separate step in the batch spec execution and in the UI:
Note to reviewers: there is also a lot of other clean-up/refactoring/move-around stuff in here that I either (a) had to do to make this easier or (b) wanted to do after digging more into this and realizing that we could probably decouple the executor from this whole process of caching/building-changeset-specs.
I'm not done yet, but I decided to open this PR before things get unreviewable.
Take a look at 3e8475dd7951e3430d35afd76e873b047415517c to see the gist of this change. The other commits mostly move things in separate files, rename stuff, clean up dependency chains.
I'm going to create a new branch off of this one for more cleanups/refactorings.