config: make type conversion explicit

The type of a config value depends on the tool that interprets
it. Parsing eagerly can lead to a situation where we return a bool
instead of a string or a number.

Let the user specify the type themselves by passing in a (str, type)
tuple into the mapping interface.
Adjust to libgit2 dup changes
Adjust to reference creation signatures
Blame: orig_ is now filled
Adjust to the git_buf changes

We no longer need the max-path define, so we can get rid of that and the
pypy checking.
Adjust to oid -> id renaming
Adjust to option struct naming change
Adjust to the merge changes

There is no more MergeResult type. Instead, the user can use
Repository.merge_analysis() to get an overview of their options and call
git_merge() when they mean to merge.

The git_merge() function now also performs a checkout.
Adjust to options changes

We can now use a git_buf to extract the search path.
Start implementing remotes with CFFI

This moves enough code into python with CFFI to pass the test_remotes
unit tests. There is no credentials support yet.

There is a small change in the return value of Remote.fetch() in that we
now return a TransferProgress object instead of extracting a few values
into a dictionary.
Remote: support credentials via CFFI
Remote: add support for transfer and update_tips though CFFI
Remote: add documentation strings

Now that it has the features of the old implementation, let's add
documentation on how to use it.
Remote: get rid of the C code

This code has been obsoleted by the CFFI-using code. Some credentials
code remains in C due to the clone functionality making use of it.
Implement clone via CFFI as well

This lets us get rid of the last piece of C for anything related to
remotes and credentials.
Config: make bool and int parsing explicit via functions

Passing a tuple to the mapping interface isn't the best of interfaces,
as the key is only the string.

Instead, expose `Config.get_bool()` and `Config.get_int()` methods to
parse the values as per the git-config rules before returning the
appropriate type to the user.

The mapping interface itself returns a string.
Merge remote-tracking branch 'carlos/config-parse'
Some python3 fixes
Install the "decl.h" file
Remote: make sure to take the contents of the id

Pass the contents of the buffer containing the git_oid to bytes() so
build a raw representation of its contents. Using bytes(ffi.buffer(...))
returns the representation of the buffer.