Merger: support for pruning remotes

The new merger.prune() method let us remove stall references in the
current directory.  That is probably of no use for Zuul merger itself
but definitely helpful for a client side cloner I am polishing up.

Change-Id: I29c780a5f6cd7717b2bd5fb3ee64a1c19b490faa
Merger: support for finding branches in remote

The new merger.has_branch() method let us find out whether the remote
repository has the given branch. That is probably of no use for Zuul
merger itself but will let me reproduce the gate git_has_branch() bash
function.

Change-Id: Ibca58172a7b41b1c6b63cdd4449a647020bad0c9
Add accessor for Repo._initialized

I will need later on to verify whether a repository has been
initialized. Using the propery _initialized directly cause some linting
errors, so here is a trivial accessor around it.

Change-Id: I1b03031ff31e68115e9bea4e0bbcadf93772a386
cloner to easily clone dependent repositories

The intent is to replace the devstack shell script with a python utility
which would be easy to reuse.

Change-Id: I3c8748e2544af80e72fdd0b2e3627b4fc2212c01
wmf: integrate zuul cloner

Integrate a bunch of patches that should gives us zuul-cloner.

Upstream change:
    https://review.openstack.org/#/c/70373/

Change-Id: I29a13ed59d0c421f0a8638713b897c332bcbc736