Reject empty commits (by default)

You can easily, inadvertently create empty commits in LibGit2Sharp that are treesame to their parent.  Git core will reject these empty commits, unless forced to create them, unless they are the result of a merge.

This PR similarly rejects commits that are treesame to their (only) parent unless given the option.  This further moves the optional params on `Commit` to a CommitOptions structure and deprecates old callers.