- Add S3StorageClient class implementing StorageClient Protocol
- Support AWS S3 and S3-compatible services with custom endpoints
- Automatic bucket configuration for public read access only
- Content-type detection for uploaded files
- URL generation (default S3 URLs and custom domain support)
- Error handling for common S3 errors (403, 404, NoSuchBucket, etc.)
- Retry logic with exponential backoff (consistent with BunnyStorageClient)
- Update storage_factory to return S3StorageClient for 's3' and 's3_compatible'
- Add comprehensive unit tests with mocked boto3 calls (18 tests, all passing)
Implements Story 6.2 from Epic 6: Multi-Cloud Storage Support