Introduce internal ICommittish

As originally proposed in #667, this introduces an `internal` interface to let stuff that can identify a commit own how to do so (rather than having that logic live in `RepositoryExtensions`).

@nulltoken doesn't like the name `ICommittish`, and I agree. His [last comment](https://github.com/libgit2/libgit2sharp/pull/667#discussion_r11434347):

> Considering this and the fact that a `Tag` may also point to something else than a `Commit`, about about renaming it to `ITargetObjectIdAccessor` and making it return an `ObjectId` (or null when dealing with an unborn branch for instance)?