Retry fetch specs with `--retry`

This PR adds a general purpose Retry class that can be re-used where-ever retry code is needed!

It also allows you to call `bundle install --retry 3` which will attempt to connect to ruby gems 3 times before failing, and emit a warning message each time.

```ruby
Bundler::Retry.new("something", 3).attempts do
  # code to retry here
end
```