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.
I'd see this differently.

when asking for a blob from a tag, we peel the tag (as it's a valid chain). The we find a commit. As we're being asked to retrieve a blob from a commit, we then return E_PEEL.