Various optimizations making clones and pulls faster.
Made negotiation with repo with large number of heads faster for pull and push.
git cinnabar fetch and git cinnabar reclone now handle everything internally instead of delegating to git fetch and git remote, respectively.
git cinnabar reclone doesn't lose metadata history when a cinnabarclone is used.
A clone with cinnabarclone now only records one metadata update instead of two when there are updates after the cinnabarclone.
git cinnabar reclone now only records one metadata update even when pulling from several remotes at the same time.
git cinnabar reclone will try to restore as many of the heads it knew about, fetching from skipDefaultUpdate remotes if necessary.
git cinnabar reclone --rebase allows to automatically rebase local branches and detached heads when git commits change after the reclone (e.g. when switching between a plain clone to a grafted clone, or when there was a bug in the original conversion)
cinnabar.check=no-bundle2 now pretends the Mercurial server doesn't support bundle2.
Updated crate dependencies.
Many refactors, including the conversion of many functions from C to Rust.
Fixed git push --dry-run to not report spurious errors.
Allow git push --dry-run to create metadata for the changesets the push
would create.
Various changes to download.py and git cinnabar self-update.
Push errors are now reported per pushed ref.
I/O errors are more gracefully handled on push.
The order of git and mercurial messages in the output is now more deterministic.