Expand a named-value grid into the cartesian product, one param set per
combination. Keys are processed in sorted order and each key's values in
declaration order, so the resulting sequence — and therefore the sweep index
assigned to each combination — is deterministic across runs. A key with an
empty value list collapses the product to zero sets, matching the Go original.
Expand a named-value grid into the cartesian product, one param set per combination. Keys are processed in sorted order and each key's values in declaration order, so the resulting sequence — and therefore the sweep index assigned to each combination — is deterministic across runs. A key with an empty value list collapses the product to zero sets, matching the Go original.