Do not read the whole file contents from s3 when checking for file existence:
- we can use s3_bucket.files.select() to find file by name
- note, files.find() is slow as it doesn't do lazy file list loading for a bucket

Optimization for any call to config:
before:
    first call: 40.5 sec, subsequent calls: 40.5 sec
after:
    first call: 1.4 sec, subsequent calls: 10^-5 sec
Make timed config refresh actually work:
- cached config is read from @cache_hash variable
- when get_config_file() function decides it needs to refresh, it calls _config_hash()
  that should read the config and update @cache_hash
- but before this change _config_hash() always tried to read from @cache_hash first,
  effectively disabling config refresh
Load new config files as they appear on S3 similarly to how it works for filesystem-based storage.