The idea is that if the payload is a Collection then it's probably likely to be copied, in which case we need to process early.
If the payload is not a Collection but an Iterable, then we're in a safer case because only way to consume it is through iterator()