Extended RemoteUpdater to update refspecs

Push/Pull Ref Specs can be updated via Remotes.Update(). The collections
can either be manipulated or replaced completely. Any changes are saved
immediately.
Introduce renames in status

Renames in status require more detailed data than simply paths, in
order to collect old path, new path and similarity data.  Use
git_status_list to collect this data and use a new StatusEntry to
store it.
Update libgit2 to 96fb6a6

https://github.com/libgit2/libgit2/compare/98eaf39...96fb6a6
Initial rename detection work
Revise API for rename/copy detection
Remove trailing whitespaces
Introduce ObjectDatabase.CalculateHistoryDivergence()

Fix #562
Explicitly dispose handle
Don't load a remote's refspecs lazily

We already have the refspecs parsed the git_remote, and loading them
lazily means we'll be parsing them again, and possibly parse a different
set from the ones we used to have loaded.

Make the loading eager, and pass the RemoteSafeHandle to more places, as
we need to use it in order to provide a single snapshot of the data.
Network: allow downloading from a url

This is our implementation of in-memory remotes. Ask the repository to
fetch/list from a url instead of a remote.
CommitFilter: add simplify-by-first-parent option

Now that this is doable directly inside the revision walker, let's
expose it as a possible filter option.

This fixes #258.
Rename CommitFilter.FirstParent to FirstParentOnly
Refactored Network.Fetch() with FetchOptions

Changed the signature to Network.Fetch(Remote, FetchOptions). As of
#536, optional parameters should be grouped in a xxxOptions type.
Network.Fetch() has currently 5 optional parameters, and a sixth one
(RefSpecs) will be introduced soon.
Network.Fetch() accepts optional refspec

Added Network.Fetch(Remote, IEnumerable<string>, [FetchOptions]) overload to allow for custom refspecs to
be fetched. The refspecs are used only temporarily and not stored in the configuration.

Fixes #572.
Add Archive() to ObjectDatabase
Add tarring capabilities

This commit adds [tar-cs](http://code.google.com/p/tar-cs/) to LibGit2Sharp without any modifications to the original source code.
Trim down tar-cs to keep only the tarring capabilities needed for git-archive

The resulting `TarWriter` file is a low-level abstraction that can be used to write tar files.

Included:
- only keep a unique `TarWriter` file
- merging `UsTarHeader` and `TarHeader`, and adding them as private classes of `TarWriter`
- removal of unneeded `Write` overloads

Some changes to the tar format has been included to better comply with the one described here: http://en.wikipedia.org/wiki/Tar_%28computing%29#Format_details
Add archive as tar functionality

Implemented as an extension method of `ObjectDatabase`.
Lots of logic taken from [archive-tar.c](https://github.com/git/git/blob/master/archive-tar.c).
Add tar archiving tests
Fix compilation warnings