361b37fb

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Skip per-step round-trip on rework heads, add whole-plan cycle test

PlanStep gains a stepIsReworkHead flag set on the second occurrence of
a change name in the plan (deploy target ending in @HEAD). The per-step
round-trip check skips these because sqitch's revert of just the rework
runs the rework's revert script, which by sqitch convention undoes the
whole change rather than only the rework — making the intermediate
state empty rather than post(predecessor) and failing the check
spuriously.

To still cover rework heads (and sqitch's registry across a full
deploy/revert cycle), add a separate whole-plan deploy/revert/redeploy
cycle test alongside the per-change checks. Exposed as
runSqitchWholePlanCycle for callers that need to drive it in IO.

PlanSpec now asserts whole PlanStep records instead of per-field.