Use gitlab_git create branch instead of gitlab_shell to prevent shelling out for better performance
This change switches the use of gitlab-shell for gitlab_git. The main reason is performance because the latter uses Rugged instead of shelled out git executions, so we save the forking time and memory overhead.
In general this change is quite small and simple and is just an initial step to do the same thing with tagging.
There is still one thing left to do that is beyond the scope for now: handle exceptions correctly to not let Rugged leak out of gitlab_git.
cc @DouweM
Fixes #3329 (closed)