Use Rugged in Commit, Diff, and Repository.log()

I gave the Commit and Diff objects the ability to wrap either a Rugged object or a Grit object.  That allows the `Repository.log()` method to use Rugged instead of Grit and return an array of Rugged commit objects.

### Breaking changes
* __`Gitlab::Git::Commit.parents` returns an array of `Gitlab::Git::Commit` objects instead of Rugged commits__
    I did this to be consistent with the existing `diffs` method.  You can still get the Rugged parent commits with `raw_commit`.

* __The new `CommitStats` class doesn't implement a `files` method__
    The `files` method isn't used internally or by Gitlab CE.

* __`Repository.log` no longer uses the `follow` option__
    This option isn't used internally or by Gitlab CE.

* __The `raw_commit` or `raw_diff` object might be a Rugged object, while callers may be expecting a Grit object.__
    This seemed acceptable; callers shouldn't expect to access Grit objects if the library is being removed from gitlab_git.
Perceived complexity for == is too high. [10/7]