Add git_commit_amend API

This adds an API to amend an existing commit, basically a shorthand for creating a new commit that fills in missing parameters from the values of an existing commit.

As part of this, I also added a new `include/git2/sys` API to create a commit using a callback to get the parents (`git_commit_create_from_callback`). Since we have several different commit creation functions that mostly differ only in the way that the parents are represented (array of `git_commit *`, array of `git_oid *`, `va_list` of `git_commit *`), this allowed me to rewrite all the commit creation APIs so that temporary allocations are no longer needed.