Worked more on upload progress tracking. I'm fairly happy with its state
now:

* It's fully implemented for rsync special remotes.

* Git remotes also fully support it, with the
  notable exception of file uploads run by `git-annex-shell recvkey`. That
  runs `rsync --server --sender`, and in that mode, rsync refuses to output
  progress info. Not sure what to do about this case. Maybe I should
  write a parser for the rsync wire protocol that can tell what chunk of the
  file is being sent, and shim it in front of the rsync server? That's
  rather hardcore, but it seems the best of a bad grab bag of options that
  include things like `LD_PRELOAD` hacks.

* Also optimised the rsync progress bar reader to read whole
  chunks of data rather than one byte at a time.

* Also got progress bars to actually update in the webapp for uploads.

  This turned out to be tricky because kqueue cannot be used to detect when
  existing files have been modified. (One of kqueue's worst shortcomings vs
  inotify.) Currently on kqueue systems it has to poll.

I will probably upload add progress tracking to the directory special remote,
which should be very easy (it already implements its own progress bars),
and leave the other special remotes for later. I can add upload progress
tracking to each special remote when I add support for configuring it in
the webapp.
