Keep local versions of git repos in pushmanager

Add method to clone or update a git repository
Allow multiple task type in GitQueue

Instead of just verifying that branches exist, Git now also has the option to
test pickmes. So that we can queue this, GitQueue needs to be changed to take
a GitQueueTask which can be one of:

- VERIFY_BRANCH: check that a branch can be found and is not a duplicate
- TEST_PICKME_CONFLICT: check which (if any) branches also pickme'd for the
    same push cause merge conflicts with this branch

This also renames the update_request methods in core.git to verify_branch,
so the tests need to be updated appropriately.
Create context managers for branching and merging

To handle setup/teardown of test branch creation and testing whether merges
break, create two context managers.
Test pickmed branches for conflicts, save results

Create method queued by the pickme servlet that checks that pickme against other
pickmes in the same push. Tag any pickes that fail to merge on top as conflicts
Send email and XMPP notifications on conflict
Display conflict text on website, add tag colours

Encode the 'conflicts' database field into the JSON representation of a request.
Set colours for the conflict-master and conflict-pickme tags
Style the Conflicts section on the request detail div
Switch from Threading to Multiprocess

Avoid global locking if git takes too long
Add pushplan to create Conflicts column in db

Add SQL commands needed to create / rollback the 'Conflicts' column in
the push_requests DB field.
Add thorough submodule conflict detection

Fully flesh out submodule conflict resolution based on the merge-branches push
helper script.
Add no-conflict marker