feat(level-blocks): add KBest/Pareto collector blocks and run consumption path
Collectors are the selection layer above scoring: a collector picks a set
out of the candidate stream instead of ranking one schedule. KBest keeps
the best k schedules lexicographically over referenced scorer instances;
Pareto keeps the non-dominated set. Both reference scorers by instanceId,
resolved at run-wiring time (like objective.lexicographic) so the spec
stays plain JSON and round-trips through fillRunConfig untouched.
Adds the Collector ADT and assertNeverCollector, ScheduleStream.kBestByLex
(reusing lexBetter), the KBest/Pareto blocks under levelset.KBest.v1 /
levelset.Pareto.v1, and LevelingRun.collectors() which runs every enabled
collector against a fresh stream keyed by graph instanceId. Validation
mirrors the lexicographic path: fillRunConfig rejects collector references
to missing/non-scorer instances, runFromConfig rejects references to
disabled scorers.