Smarter stream approach, smarter throttling

Rather than converting from a stream to a byte array, then to a stream,
this update uses streams. Also included is smarter throttling that
speeds up the requests when our requests are successful, with a max
retry throttle time based on the number of requests