Add topo bootstrap strategy for merge-heavy repos
Commit

Bootstrap currently checkpoints along the first-parent chain. For repos where each first-parent step is a merge that pulls in a large side-branch ancestry (the "Checkpoint: <hash>" pattern), the smallest possible sub-pack is "everything one merge brings in" — which can be hundreds of MB and indivisible by the existing subdivision logic. Sub-packs hit the target's body limit with no finer-grained option short of changing where checkpoints land.
Add planner.TopoChainStoppingAt: a deterministic topological walk that includes every reachable commit (parents before children, hash-tie-broken for stable resume positioning). Plumb a new bootstrap.Params.Strategy ("first-parent" default, "topo" opt-in) through syncer.Config, unstable.AdvancedOptions, and a --bootstrap-strategy flag on sync/replicate/bootstrap.
Under "topo" the chain length grows by all merge-pulled commits, so sub-pack boundaries can land inside side branches. Cost: more source fetches and source-side enumeration work proportional to the extra commit count. Worth it when the first-parent floor is above the target body limit; otherwise first-parent is leaner.
Bootstrap loop is otherwise unchanged — chain[i] is still a hash in the source repo and "want chain[i] have current" still produces the right pack regardless of whether chain[i] is on the first-parent backbone or a side branch. Tag-phase logic and resume from temp refs both work as-is because the temp ref still points to whichever commit was last successfully pushed.
Entire-Checkpoint: b43bf65a227f