Implemented repo downloads using streams

This implements feature request #93 using the requirements stated in #94

Could you elaborate on "won't work"? I think `BytesIO` should be fine:

```
buf = BytesIO()
for f in ...:
    tar.addfile(...)
    chunk = buf.getvalue()
    chunk.truncate(0)  # delete buffer contents
    chunk.seek(0)  # reset cursor
    yield chunk
```