stacker: add `pm stacker sync --hard` to bypass patch-id dedup
Default sync builds the cherry-pick list with `git rev-list --cherry-pick
--right-only <parent>...<child>` — the same patch-id heuristic `git
rebase` uses to drop already-applied commits. When a parent branch is
rewritten in place (e.g. a stacker branch is re-edited and its commits
get new patch-ids while keeping the same logical change), the child's
copy of the now-superseded commit no longer matches the parent by
patch-id, and sync replays the duplicate, hitting avoidable conflicts.
`--hard` is the explicit escape hatch: instead of the patch-id walk, it
takes the recorded `managed_base_commit` from the stacker DB and
cherry-picks exactly `<managed_base>..<HEAD>` — the commits the child
itself added since its last sync. The flag flows through the existing
sync entry point, persists on `OperationState` so `pm stacker continue`
can resume a paused `--hard` sync without re-passing the flag, and
applies to every branch in a multi-branch (downstream_sync) walk. The
new column is migrated lazily on existing DBs.