Add support for alternate download method

This patch adds support for injecting other download methods than clone
to be used to download dependencies. It will allow to use git submodule
add instead of git clone for example.

It also reduces the amount of monkeypatching needed to test the download
operation. This is good since monkeypatching is manipulating global
state and this should be avoided (patching decorators and context
managers mitigate this issue).
Add a git submodule downloader

Since we will massively use git submodules to track our history, this
commit adds a downloader that uses git submodules instead of plain git
clones.

It is not yet added to the real application but the code is there.
Add git submodules commandline option

This commandline switch allows the use of git submodules instead of git
clone.