add git_submodule_recurse_t type
work in progress wrapping git_clone
wrappers for git_cred, git_transfer_progress. don't call nil callbacks.
minor
wip wrapping git_remote
Add partial diff/patch functionality.

This commit adds barebones capacity to generate diffs from two trees and
to emit those as git-style diffs (via `Patch.String`), or to enumerate
the files/hunks/lines in the diff to emit the data yourself.

The walk functions have been implemented in the same manner as the Odb
walking methods.

Note that not all of the functionality is implemented for either the
`git_diff_*` nor the `git_patch_*` functions, and there are unexposed
constants which would likely be useful to add.
Export the constants and enumerations for diffs.

It is possible that the typed enums from libgit2 should be exported as
distinct types rather than numeric constants (e.g, `git_delta_t` and
`git_line_t` should be typed), but this has not been done in this patch.
Pre-emptively copy data when marshalling diff callback data.

When marshalling diff callback data to Go structs, any `char*` need to
be pre-emptively copied onto Go's heap as they're invalidated as soon as
our callback function returns. This patch adds this extra copy before
sending the value to the channel, which fixes a bug wherein
`DiffLine.Content`, `DiffFile.Path` and `DiffHunk.Header` would
previously return garbage data.
Unwrap DiffLine; add types for git_diff_flag_t and git_delta_t.
Bundle consts more idiomatically; add GitLineType alias.
merge latest, cleanup error handling, add thread locks
Actually type constants; unwrap DiffFile, DiffDelta, DiffHunk.
add push, refine remotes
fix handling of msg to treat empty str as nil
merge with latest
cleanup clone code
clean up clone code
fix return for old go versions / travis
remove strarray wrappers
fix chunk create logic