Adapt file link for GitLab 5.2

Fix the defective file link for GitLab browsers:

For older GitLab versions, there was a duplicate slash and for
newer versions the link is completely wrong. Fix both:

Old:   http://urlbase//0123456789...01234567/tree/file.name
<5.2:  http://urlbase/0123456789...01234567/tree/file.name
>=5.2: http://urlbase/blob/0123456789...01234567/file.name

Note: I do not know at which version of GitLab the new link
      format was introduced. This patch assumes 5.2.0, but it
      may be that older versions already need the new format.

Closes #JENKINS-18328
Introduced a single extension point that will cover all fringe use cases.

Configuration bloat has gone unchecked in GitSCM  for a while now, making this otherwise very popular plugin rather hard to use. This change introduces a single extension point "GitSCMExtension", from which various more specific extension points will be derived.

The user will still configure all such extension implementations in a single list, which helps us reduce the out-of-the-box UI surface while still defining arbitrary number of extension points.
added the first batch of extension implementations
collapsing intermediate extension point types
moving to a different package
split off one more extension
Properly added back code for backward compatibility
split off the class that tags a build
Desginating the refactored git-client as 1.1
As the first step, got rid of the big FileCallable blocks

This will allow me to then start merging them together
Moving out the clean part from the if/else branches.

This allows me to then extract this out into a separate extension point

This changes the order of commands for the merge case, which technically makes this change an incompatible change.

I still think this change is OK, because the point of the clean operation is to prevent the left-over from the previous build from affecting the next build. And certainly if the workspace is dirty, the merge operation can fail.
Follow up for remotable GitClient
Split off the submodule related configuration in here.

Code still needs to be split out more, so this is just the beginning
Simplified by taking advantage of remotable GitClient.

Also, simplified the error handling. The original code was trying to continue execution after the first failure, but I don't know if that's worth the code complexity.
looks like this got out of sync
Simplification by using remotable GitClient
unused code
More simplification using the remotable GitClient
looks like these tests got out of sync, too
still more simplification