Issue:
[REFACTOR] Enable runtime flag for `s3` feature

### Feature Description

Tracking issue for refactoring `s3` to include compile time + runtime time flag 

Current implementation - We are building 2 docker images, one image contains all the release features including `kms`, `s3`, etc and other without these features which are getting pushed to the public docker hub. This was to ensure that anyone who wants to try out Hyperswitch locally by pulling the pre-built docker image, it shouldn't be a hassle for he/she to setup `s3`. For this very reason we were pushing 2 docker images which was a temporary solution  

### Possible Implementation

Providing support for enabling or disabling s3 feature in runtime so that we no longer have to build 2 images. 

### Tasks 

- [x] #3340
- [x] #3347

### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!

Resolution:
<think>
PR Context:
- Title: refactor: add support for extending file storage to other schemes and provide a runtime flag for the same
- Merged: 2024-01-30T08:03:41Z
- Files changed: 18 files
- Commits: 30 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [ ] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
This PR includes refactoring for:
* Enabling easy extension of other file storage schemes. 
* Providing a runtime flag for the file storage feature.
* Restrict the file storage objects(structs, methods) visibility wherever possible.

### 
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** refactor: add support for extending file storage to other schemes and provide a runtime flag for the
Files to modify:


**crates/external_services/src/file_storage.rs**
  Add:
    - function: pub::validate
    - function: pub::get_file_storage_client
    - function: private::fmt
    - struct: pub::InvalidFileStorageConfig
    - enum: pub::FileStorageConfig
    - enum: pub::FileStorageError
    - trait: pub::FileStorageInterface
    - impl: impl FileStorageConfig
    - impl: impl std::error::Error for InvalidFileStorageConfig
    - impl: impl Display for InvalidFileStorageConfig
    - mod: private::aws_s3
    - mod: private::file_system

**crates/external_services/src/file_storage/aws_s3.rs**
  Add:
    - function: pub::validate
    - function: pub::new
    - function: private::upload_file
    - function: private::delete_file
    - function: private::retrieve_file
    - function: private::upload_file
    - function: private::delete_file
    - function: private::retrieve_file
    - struct: pub::AwsFileStorageConfig
    - struct: pub::AwsFileStorageClient
    - enum: private::AwsS3StorageError
    - impl: impl AwsFileStorageConfig
    - impl: impl AwsFileStorageClient
    - impl: impl FileStorageInterface for AwsFileStorageClient

**crates/external_services/src/file_storage/file_system.rs**
  Add:
    - function: private::get_file_path
    - function: private::upload_file
    - function: private::delete_file
    - function: private::retrieve_file
    - function: private::upload_file
    - function: private::delete_file
    - function: private::retrieve_file
    - struct: pub::FileSystem
    - enum: private::FileSystemStorageError
    - impl: impl FileSystem
    - impl: impl FileStorageInterface for FileSystem

**crates/external_services/src/lib.rs**
  Add:
    - mod: pub::file_storage

**crates/router/src/configs/settings.rs**
  Remove:
    - struct: pub::FileUploadConfig

**crates/router/src/configs/validations.rs**
  Remove:
    - function: pub::validate
    - impl: impl super::settings::FileUploadConfig

**crates/router/src/core/files.rs**
  Remove:
    - mod: pub::s3_utils
    - mod: pub::fs_utils

**crates/router/src/core/files/fs_utils.rs**
  Remove:
    - function: pub::get_file_path
    - function: pub::save_file_to_fs
    - function: pub::delete_file_from_fs
    - function: pub::retrieve_file_from_fs

**crates/router/src/core/files/helpers.rs**
  Remove:
    - function: pub::upload_file
    - function: pub::delete_file
    - function: pub::retrieve_file

**crates/router/src/core/files/s3_utils.rs**
  Remove:
    - function: private::get_aws_client
    - function: pub::upload_file_to_s3
    - function: pub::delete_file_from_s3
    - function: pub::retrieve_file_from_s3

**crates/router/src/routes/app.rs**
  Modify existing code