Adds size-sensitive progress bar to uploads

Instead of relying on the file count for determining progress on uploads
and downloads, this commit determines how many bytes will be uploaded
and then sets the progress bar to increase by however many bytes were
uploaded after each file.

To accomplish this, some of the longer functions were split into smaller
components.  For example, it is imperative to be able to know how large
a sync will be before starting the sync, therefore it is not possible to
wait until on the individual file level to have the file check it it
should sync or not.  As a consequence, the control of figuring out what
should be sync'd and then the control of the transport of the bits are
now split into two different areas, whereas before they were one.