AsyncByteStream: use limited amount of memory instead permanent allocations
AsyncByteStream: use limited amount of memory instead permanent allocations

Use ring-buffer of customizable size(now hardcoded) to keep data to write.
Push as much data to the buffer as can.
Return really pushed size - if it's lesser than wanted to write
this download block will be discarded in DownloadBackendBase.

Do one attempt to write to underlying stream.
And write unwritten at next iteration of working loop.

StreamOpData memory footprint can be reduced - size_t lesser
than ByteArray - because ByteArray don't needed anymore.

GSGroup/stingraykit,GSGroup/stingraykit