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