Previously get_for_plan() collapsed all ChangeEntry rows from a plan into
a single SpecChangeSet, losing the ability to distinguish between
separate changeset scopes. This restores per-changeset grouping by
querying raw DB rows and partitioning them by changeset_id before
constructing individual SpecChangeSet objects.