implement streaming requests

Also, make sure `done()` is called exactly once before `getResponse()`.