Add parallelization to software fetching

A much simpler thread pool implementation

I defaulted the max_concurrency to the total number of softwares that need to be fetched. (overridable in the project config as the `max_concurrency` key just in case you need to reduce it for a project for some reason)

![hakgphe](https://cloud.githubusercontent.com/assets/428/3988077/62d268ac-28ac-11e4-91ed-17cee1984f73.gif)

We should probably have some kind of timeout here, in case the threads do not finish in a certain amount of time.