Download

This adds downloading capabilities to both the client and the server. It's quite hacked together.
I feel like this should be possible just using `io.MultiReader`. We can come back to it later though.