Added retry mechanism for S3 connection errors

Closes #95
Why do we need a hashmap here and not only a single instance?

Something like:

```java
public class TestAwsS3Service extends InternalAwsS3Service {

    AmazonS3 cachedClient = null;

    @Inject
    public TestAwsS3Service(Settings settings, SettingsFilter settingsFilter) {
        super(settings, settingsFilter);
    }


    @Override
    public synchronized AmazonS3 client() {
        return cachedWrapper(super.client());
    }

    @Override
    public synchronized AmazonS3 client(String region, String account, String key) {
        return cachedWrapper(super.client(region, account, key));
    }

    private AmazonS3 cachedWrapper(AmazonS3 client) {
        if (cachedClient == null) {
            cachedClient = new TestAmazonS3(client, componentSettings);
        }
        return cachedClient;
    }

    @Override
    protected synchronized void doClose() throws ElasticsearchException {
        super.doClose();
    }
}
```