Download missing blobs in parallel

This creates a thread for each missing blob and downloads them 5 at a time.
I added a ProgressRenderer class to handle concurrent terminal output in
multiple lines (i.e. updading the progress for each blob).
This also adds a Semaphore class, that is used to limit the amout of
concurrent downloads.
Adds .bosh_config option for max_parallel_downloads

Defaults to 1 (current behavior), will read the file and downloads blobs
in parallel if configuration is set.
Add --max-parallel-downloads (-M) option to CLI

This overrides the max_parallel_downloads config and takes precedence.

You can now:

    bosh -M 5 sync blobs
    OR
    bosh -M 5 create release
Use a unique path for each blob to avoid file corruption
Install blobs even if they weren't missing
Add unfancy progress renderer for non-interactive mode

Signed-off-by: Zachary Auerbach <zauerbach@pivotal.io>
Merge PR #684 from luan "Download missing blobs in parallel"

[#81992382]

Signed-off-by: Zachary Auerbach <zauerbach@pivotal.io>