Make BuildSignature() throw a descriptive message

When global user.name or user.email is set to an empty value, it will
now throw a LibGit2SharpException with proper explanatory message.
Previously it would throw an ArgumentException with obscure message:
"String cannot be empty\nParameter name: name".
Use a build properties file instead of custom build actions to copy native binaries
Branch.Remote property should not throw

The Branch.Remote property can throw when it attempts to resolve a remote
for a remote-tracking branch, and the remote cannot be found or is
ambiguous. In those situations, Branch.Remote should return null. If there
is a need for the specific exception to be returned, we can look at
transitioning to a method for this functionality.
Verify that resolving a remote-tracking branch's remote can throw
Introduce MergeFetchHeadNotFoundException

This adds a  strongly typed exception to indicate when a pull is
performed and a reference for the configured merge branch was not fetched.
Update exception message when Pull cannot find ref to merge
Update libgit2 to build with GIT_TRACE

Build libgit2 with tracing information so that we can provide it to
consumers.
Update libgit2 to e0383fa
Introduce logging

Consumers can register a GlobalSettings.LogConfiguration to receive
logging messages from LibGit2Sharp and trace messages from libgit2.
Simplify Travis install phase.
Fix compareOptions handling in Diff.Compare<T>

Fix #827
Drop internal ICredentialsProvider
Require NuGet  2.7+ to install the package
Move higher level Index operations to IRepository

Fix #822
Update libgit2 to 3f8d005

https://github.com/libgit2/libgit2/compare/e0383fa...3f8d005
Test for invalid signature config
Add preemptive config null check

libgit2 will throw if you set a NULL value, so we might as well.
Safer email and name validation in Configuration.BuildSignature
Prevent creation of a Signature with an empty email
Refactor Signature creation from configuration