Removed useless warnings.

I consider this warning useless for multiple reasons.

1. It is not actionable. If the merge is configured, then this can happen legitimately, and there's nothing the user can do about it.
2. it is reporting a problem in a wrong place. I assume the reason this was reported is because when the commit we build is pointed by multiple branches and all their changelogs show up in a single list, the user can't easily tell which commit belongs to which branch. But that confusion happens when someone is looking at the change list page, not when someone is looking at the console.

If grouping commits into branches they belong to is useful, then the right thing to do is to fix the GitChangeLogSet so that it can do it.
Unified the changelog computation.

As a step toward extracting out the merge setting to an GitSCMExtension, eliminating the special handling for the changelog computation for a merge commit.

As I left in the comment of the computeChangeLog method, the changelog computation in the case of merge probably needs more work
Moved out the submodule stuff into SubmoduleOptions
Simplification

it is unlikely that the caller doesn't statically know whether it wants to copy or get
doc improvement
GitSCM checkout message is way too verbose.
Got rid of MergeBuild.

Build object is created by GitSCM, and every AbstractBuild gets exactly one, so if we are to move the merge support to GitSCMExtension, then MergeBuild that tries to take over the Build object doesn't work --- it's just not composable.
further simplification
clean is executing twice
more simplification
Separated "retrieveChanges" from "determineRevisionToBuild"
Added a hook to decorate the selected commit.

This is for turning the merge support into an extension point
Pulled out the pre-build merge support into a separate extension point
fixup for PruneStaleBranch