Zero memory for major objects before freeing

By zeroing out the memory when we free larger objects (i.e. those
that serve as collections of other data, such as repos, odb, refdb),
I'm hoping that it will be easier for libgit2 bindings to find
errors in their object management code.
Mutex init can fail

It is obviously quite a serious problem if this happens, but mutex
initialization can fail and we should detect it.  It's a bit like
a memory allocation failure, in that you're probably pretty screwed
if this occurs, but at least we'll catch it.
Simplify git_futils_mkdir

This routine was (is) pretty complicated, but given the recent
changes, it seemed like it could be simplified a bit.
Basic function context header

This implements a basic callback to extract function context for
a diff.  It always uses the same search heuristic right now with
no regular expressions or language-specific variants.  Those will
come next, I think.
Move some diff helpers into separate file
Make mkdir early exit cases clearer

There are two places where git_futils_mkdir should exit early or
at least do less.  The first is when using GIT_MKDIR_SKIP_LAST
and having that flag leave no directory left to create; it was
being handled previously, but the behavior was subtle.  Now I put
in a clear explicit check that exits early in that case.

The second is when there is no directory to create, but there is
a valid path that should be verified.  I shifted the logic a bit
so we'll be better about not entering the loop than that happens.
Merge pull request #1635 from arrbee/simplify-mkdir

Simplify git_futils_mkdir
Add safe memset and use it

This adds a `git__memset` routine that will not be optimized away
and updates the places where I memset() right before a free() call
to use it.
Reorganize diff and add basic diff driver

This is a significant reorganization of the diff code to break it
into a set of more clearly distinct files and to document the new
organization.  Hopefully this will make the diff code easier to
understand and to extend.

This adds a new `git_diff_driver` object that looks of diff driver
information from the attributes and the config so that things like
function content in diff headers can be provided.  The full driver
spec is not implemented in the commit - this is focused on the
reorganization of the code and putting the driver hooks in place.

This also removes a few #includes from src/repository.h that were
overbroad, but as a result required extra #includes in a variety
of places since including src/repository.h no longer results in
pulling in the whole world.
failing unit test for similar renames
keep source similarity in rename detection
fix missing file and bad prototype
Fix some memory leaks
start implementing diff driver registry
signature: extend trimming to more whitespace

There are all sorts of misconfiguration in the wild. We already rely
on the signature constructor to trim SP. Extend the logic to use
`isspace` to decide whether a character should be trimmed.
Merge pull request #1644 from carlosmn/sig-isspace

signature: extend trimming to more whitespace
Implement regex pattern diff driver

This implements the loading of regular expression pattern lists
for diff drivers that search for function context in that way.
This also changes the way that diff drivers update options and
interface with xdiff APIs to make them a little more flexible.
Add high(est) config level for application specific config files

Some tools use an extra level to maintain an application specific config files on top of the normal ones. Revision 16adc9fade52b49e2bc13cb52407cc0025a93c8b broke this.

Signed-off-by: Sven Strickroth <email@cs-ware.de>
Merge pull request #1645 from csware/config_level_app

Add high(est) config level for application specific config files
Add diff drivers tests (and fix bugs)

This adds real tests for user-configured diff drivers and in the
process found a bunch of bugs.