odb: add git_odb_foreach()

Go through each backend and list every objects that exists in
them. This allows fsck-like uses.
Add a couple of useful git_buf utilities

* `git_buf_rfind` (with tests and tests for `git_buf_rfind_next`)
* `git_buf_puts_escaped` and `git_buf_puts_escaped_regex` (with tests)
  to copy strings into a buffer while injecting an escape sequence
  (e.g. '\') in front of particular characters.
Add path utilities to resolve relative paths

This makes it easy to take a buffer containing a path with relative
references (i.e. .. or . path segments) and resolve all of those
into a clean path.  This can be applied to URLs as well as file
paths which can be useful.

As part of this, I made the drive-letter detection apply on all
platforms, not just windows.  If you give a path that looks like
"c:/..." on any platform, it seems like we might as well detect
that as a rooted path.  I suppose if you create a directory named
"x:" on another platform and want to use that as the beginning
of a relative path under the root directory of your repo, this
could cause a problem, but then it seems like you're asking for
trouble.
Adding unicode space to match crlf patterns

Adding 0x85 to `git__isspace` since we also look for that in filter.c
as a whitespace character.
Adding git_config_foreach_match() iteration fn

Adding a new config iteration function that let's you iterate
over just the config entries that match a particular regular
expression.  The old foreach becomes a simple use of this with
an empty pattern.

This also fixes an apparent bug in the existing `git_config_foreach`
where returning a non-zero value from the iteration callback was
not correctly aborting the iteration and the returned value was
not being propogated back to the caller of foreach.

Added to tests to cover all these changes.
Add flag to write gitlink on setting repo workdir

This added a flag to the `git_repository_set_workdir()` function
that enables generation of a `.git` gitlink file that links the
new workdir to the parent repository.  Essentially, the flag tells
the function to write out the changes to disk to permanently set
the workdir of the repository to the new path.

If you pass this flag as true, then setting the workdir to something
other than the default workdir (i.e. the parent of the .git repo
directory), will create a plain file named ".git" with the standard
gitlink contents "gitdir: <repo-path>", and also update the
"core.worktree" and "core.bare" config values.

Setting the workdir to the default repo workdir will clear the
core.worktree flag (but still permanently set core.bare to false).

BTW, the libgit2 API does not currently provide a function for
clearing the workdir and converting a non-bare repo into a bare one.
Fix missing NUL termination of buffer
Merge pull request #812 from arrbee/assorted-tweaks

Assorted goodies
Merge pull request #814 from nulltoken/topic/revparse-refac

Revparse refactoring: a start
Merge pull request #805 from nulltoken/fix/revwalk-email-parsing

Fix revwalk email parsing
Merge pull request #789 from carlosmn/odb-foreach

odb: add git_odb_foreach()
tree: prevent git_tree_entry_free() from segfaulting when being passed a NULL tree_entry
tree: unfound tree entry returns GIT_ENOTFOUND
revparse: simplify handling of the colon syntax
revparse: fix disambiguation of refs and abbrev oids
revparse: only allow decimal specifiers in carete and tilde synatx

    passing 0 to git_strol(32|64) let the implementation guess if it's
    dealing with an octal number or a decimal one.

    Let's make it safe and ensure that both 'HEAD@{010}' and 'HEAD@{10}'
    point at the same commit.