Add ByteSourcePayloadIterator to BasePayloadSlicer

ByteSourcePayloadIterator avoids buffering the entire slice like
InputStreamPayloadIterator does.  Also rename PayloadIterator to
better reflect its intent and reduce its visibility.
Why this commit theoretically represents an interface change, practically all callers interact with this class via `BasePayloadSlicer.slice`.