feat(level-blocks): generic compile traversal over pipeline graphs
compileGraph validates (throwing GraphValidationError carrying the
issues), runs each block's apply() over its parsed params, groups the
outputs into CompiledFamilies, and hands the result to a CompileTarget.
Targets live app-side; future targets (direct serialSGS constraint
sets, MiniZinc) slot in behind the same interface without a format
change.