Return resulting commits from merger

Currently the results (i.e., the exact commits on each project-branch)
of a speculative merge operation are only available by examining the
Zuul refs created by the merger.  The executor appears to use the results
of the speculative merge in its tests, but that's only surface deep --
it simply leaves the repo in the last merge state, which is sufficient
for simple tests, but not for multi-branch cross-repo dependencies.

This change returns the branch names and commits for each project-branch
involved in a speculative merge.  The executor then updates the branch
head references in the job's working source directory to reflect the
merger results.  In other words, even if the job is running for a change
on master, if that change depends on a change in stable then the stable
branch of the repo will now include the stable change.

Note: this change does not yet alter the branch checked out -- we're still
on a detached head.  That will be addressed in a future change.

Change-Id: Id842d64312d87709f0ed93121735fe97faccc189
3 files changed