Expose status, add and remove through cmdliner, each defaulting to the
origin remote and accepting --remote. Expected failures print one line on
standard error and exit 1 instead of raising.
Compute the git actions a request needs before running any of them, so a
dry run and a real run can never describe different changes. Adding the
first explicit push destination records the implicit one first, and
removing one collapses redundant configuration back to implicit pushing.
Run git directly through Unix.create_process so that user supplied values
such as URLs stay separate argv entries, and model a remote as its fetch
URLs, its effective push destinations and its explicit pushurl entries.