runner: Predetermine vows & contexts

I don’t see any appreciable speed difference, *but*…in theory, this should be faster, because the for loops now:

- …only iterate over the vows or contexts (rather than over all context members, testing whether each is a vow/subcontext)
- …iterate over sets, which (since they’re unordered) iterate much faster than lists