ALPHA 2:

  * web page
    - better examples page

  * threading/batch
    - (rt) propose an interface for threaded batch downloads
    - (mds) design a new progress-meter interface for threaded
      multi-file downloads
    - (rt) look at CacheFTPHandler and its implications for batch mode
      and byte-ranges/reget

  * progress meter stuff
    - support for retrying a file (in a MirrorGroup, for example)
    - failure support (done?)
    - support for when we have less information (no sizes, etc)
    - check compatibility with gui interfaces
    - starting a download with some parts already read (with reget, 
      for example)

  * look at making the 'check_timestamp' reget mode work with ftp.
    Currently, we NEVER get a timestamp back, so we can't compare.
    We'll probably need to subclass/replace either the urllib2 FTP handler
    or the ftplib FTP object (or both, but I doubt it).  It may or may not
    be worth it just for this one mode of reget.  It fails safely - by
    getting the entire file.

  * cache dns lookups -- for a possible approach, see
    https://lists.dulug.duke.edu/pipermail/yum-devel/2004-March/000136.html

Misc/Maybe:

  * BatchURLGrabber/BatchMirrorGroup for concurrent downloads and possibly to
    handle forking into secure/setuid sandbox.

  * Consider adding a progress_meter implementation that can be used in 
    concurrent download situations (I have some ideas about this -mds)
  
  * Consider using CacheFTPHandler instead of FTPHandler in byterange.py. 
    CacheFTPHandler reuses connections but this may lead to problems with
    ranges. I've tested CacheFTPHandler with ranges using vsftpd as a 
    server and everything works fine but this needs more exhaustive tests 
    or a fallback mechanism. Also, CacheFTPHandler breaks with multiple 
    threads.

  * Consider some statistics tracking so that urlgrabber can record the 
    speed/reliability of different servers.  This could then be used by
    the mirror code for choosing optimal servers (slick, eh?)

  * check SSL certs.  This may require PyOpenSSL.
