Reference: implement peel()

This makes both objects and references peelable via the same interface,
simplifying how to get to the wanted type.
Repository: make use of peel for diff()

Instead of trying to reimplement parts of it, make use of Object.peel()
and Reference.peel() to get to a Blob or Tree.
Reference: deprecate get_object() in favour of peel()

Let Reference.peel()'s argument be optional, and default to GIT_OBJ_ANY,
which mirrors the behaviour of get_object().

Since we reimplement the get_object() behaviour, change it to call
peel() which makes sure we can keep using the old tests for this aspect.
Merge pull request #434 from carlosmn/diff-refactor

Repository: make use of peel for diff()