Handle local file:/// paths on Windows

Windows can't handle a path like `/c:/foo`; when turning file:///
URIs into local paths, we must strip the leading slash.
Export git_buf_text_is_binary and git_buf_text_contains_nul.

So that users don’t need to implement binary detection themselves.
Make sure \n is at the end of config file before a new section is written
Add unit test to test add section without lf at EOF
Merge pull request #2467 from ethomson/win_local_clone

Handle local file:/// paths on Windows
clone: should_clone? Of course we should clone. That's not the question
ssh: Fix unused warning
Merge pull request #2476 from linquize/config-lf-eof

When adding new config section, handle config file not ending with LF
Just put it all in buffer.
Merge pull request #2475 from libgit2/expose-buffer-binary-detection

Export git_buf_text_is_binary and git_buf_text_contains_nul.
Introduce git_rebase to set up a rebase session

Introduce `git_rebase` to set up a rebase session that can
then be continued.  Immediately, only merge-type rebase is
supported.
git_reset: const the git_signature arg
Introduce git_rebase_abort

Abort an in-progress rebase and move the working directory and
repository back to the ORIG_HEAD state.
Introduce git_rebase_next

`git_rebase_next` will apply the next patch (or cherry-pick)
operation, leaving the results checked out in the index / working
directory so that consumers can resolve any conflicts, as appropriate.
git_rebase_next: write conflicts nicely during rebase
Introduce git_rebase_commit

Commit the current patch of a rebase process.
git_rebase_commit: drop already-picked commits

Already cherry-picked commits should not be re-included.  If all changes
included in a commit exist in the upstream, then we should error with
GIT_EAPPLIED.
git_rebase_next: test that we return GIT_ITEROVER
Introduce git_rebase_finish to complete a rebase
git_rebase_commit: write HEAD's reflog appropriately