Improve loopy codegen determinism
Use an ordered set for collecting operators to ensure deterministic variable naming, as the variable name depends on the collection order. (As an alternative I tried sorting the output of the collector by string, but the stringification is very expensive on simple examples like wave-min.) Also, improve debuggability of any remaining bugs in loopy kernels (such as any latent nondeterminism) by giving each assignment kernel a separate name.