git-sync-all

@kevgo @allewun 


I broke up first and last branch in all conflict cases to make sure aborting / skipping / continuing worked as expected.

Tests are structured as follows:

* feature_branch_merge_main_branch_conflict
  * with_tracking_branch_updates
    * first_branch
       * with_open_changes.feature
       * without_open_changes.feature
    * last_branch
       * with_open_changes.feature
       * without_open_changes.feature
  * without_tracking_branch_updates
    * first_branch
       * with_open_changes.feature
       * without_open_changes.feature
    * last_branch
       * with_open_changes.feature
       * without_open_changes.feature
* feature_branch_merge_tracking_branch_conflict
    * first_branch
       * with_open_changes.feature
       * without_open_changes.feature
    * last_branch
       * with_open_changes.feature
       * without_open_changes.feature
* main_branch_rebase_tracking_branch_conflict
  * with_open_changes.feature
  * without_open_changes.feature
* no_conflicts
   * feature_branches
     * with_open_changes.feature
     * without_open_changes.feature
   * non_feature_branches
     * with_open_changes.feature
     * without_open_changes.feature
   * remote_only_branches
     * with_open_changes.feature
     * without_open_changes.feature
* non_feature_branch_rebase_tracking_branch_conflict
  * first_branch
     * with_open_changes.feature
     * without_open_changes.feature
  * last_branch
     * with_open_changes.feature
     * without_open_changes.feature