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)

I think it would be nicer if the API looked like this:

```ruby
ThreadPool.new(concurrency) do |pool|
  softwares.each do |software|
    pool.launch { software.fetch }
  end
end
```

Then we can wrap up all the "waiting" logic inside the ThreadWorker.