Fix git tab completion

Holy shit. Summary from my explination in camfire:

With git 1.8.0, the completion was done entirely through their bash
completion by emulating ksh. I believe the functions were the same as
the command name, so git checkout's completion function was
git-checkout. Some time between 1.8.0 and 1.8.3, they moved to native
zsh completion, and also renamed their functions in their bash
completion to be _git_<command>(). The way the zsh completion works is
to take in the argument, and dynamically build the function call. So
when I run git <tab> it builds that out as __git_zsh_main. When I do the
compdef as compdef _git gco=git-checkout, it tries to build
__git-checkout_zsh_main. When it can't find that, it falls back to just
emulating ksh, and calling __git-checkout_main, which doesn't exist (and
is the error that I was seeing).

So I changed my compdef to compdef _git gco=checkout. This passes
checkout into the function instead of git-checkout. Then I added an elif
that checks to see if the function _git_<command> is defined. If it is,
I pass the command on to the internal __git_zsh_bach_func method that
emulates ksh and returns the proper completion