post-review: yet another attempt to improve git support

Review Request #1144 — Created Oct. 4, 2009 and submitted — Latest diff uploaded

This is refresh of review 985. I've refactored the change to be more intelligent, and I didn't touch git-svn behavior.

The general idea is to try to detect the merge base of your current head, or gracefully fall back to defaults. You can optionally specify a tracking branch if you need to.

* Try to detect the tracking branch for the current HEAD, if possible
* If a tracking branch doesn't exist, or is not remote, fall back to origin/master
* If --tracking-branch is specified, use this branch instead of origin/master
* Determine the merge base with the git merge-base command. This makes it okay to specify a tracking branch even when its head no longer points to the original branching point.
* No longer mucks with the current git-svn behavior.
* Add unit tests for pure git. The tests are limited to pure git GitClient right now and aren't comprehensive, but cover the scenarios I changed.
Tested with rbtools repo and local server with following scenarios:

* Remote tracking branch available
* Local tracking branch available (ignored)
* No tracking branch available (default to origin/master)
* No tracking branch available, with --tracking specified
* No tracking branch available with --parent specified
* Revision range specified

$ nosetests
Ran 10 tests in 12.420s