The more I look at this channel iterators the more it looks like an antipattern. Channels are meant for communication between threads, which is not what we have here at all. They're also useful for converting a push/callback based iterator to a pull iterator, but we have that built-in for most iteration in libgit2 directly, so they don't help here.

What we end up instead is something that can only return one value, which means that the only way we have of handling errors returned from the iterator is closing the channel. But the listener has no idea whether it's a normal termination or an error.

I'd rather see that type of iterator (where we're just calling `Something.Next()` and passing the result through a channel) gone, rather than try to cram everything into that.