Limit number of blocks buffered in memory during fetch

This avoids excessive RAM usage when fetching very
large files when the user's network link is much slower
than the intra-cluster network links.

We also add a manual call to erlang:collect_garbage/0
in the timeout event, to make sure that blocks deleted
from the buffer orddict are cleaned up (things can get
pretty busy with fast links and erlang won't take a
chance to GC the FSM's heap as often as it should)