peel: reject bad queries with EPEEL

There are some combination of objects and target types which we know
cannot be fulfilled. Return EPEEL for those to signify that there is a
mismatch in the user-provided data and what the object model is capable
of satisfying.

This should resolve #2627.
So asking for a peeled blob from a tag that goes through a commit (`e90810b`) and a tree (`53fc32d1`) returns `GIT_EAMBIGUOUS`, but asking for a peeled blob directly from the same commit or tree returns `E_PEEL`? That looks a bit weird to me.