Use blocks in a ring buffer to cache the streaming with bounded memory comsumpion. Increase the streaming bandwidth by concurrent downloading requests.

The major changes are in the commit 407660b.
Also try to just limit the memory usage of downloading in the first 3 commits. It's still fragile when bandwidth of up/down stream don't match. The server will disconnect if the proxy holds off the response too long.

BTW, I'm using a router to run this. Now, memory is not a problem, but CPU pressure is still quite high, esp. for HD videos.