feat(analytics): Analytics Request Validator and config driven forex feature

## Current behaviour

- Forex api calls are occuring on every analytics api call
- There is no analytics request validator.

## Proposed Changes

- Enable/Disable forex functionality based on a config flag.
- `request_validator()` to validate requests on various grounds and throw contextual and comprehensive `4xx` errors.
- `request_validator()` should also be able to discern whether metrics passed in a request, require `forex_api` call.
<think>
PR Context:
- Title: feat(analytics): Analytics Request Validator and config driven forex feature
- Merged: 2024-12-17T10:50:36Z
- Files changed: 16 files
- Commits: 16 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [x] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Fixes #6731 

## Description
<!-- Describe your changes in detail -->
### Config driven forex functionality
- Created a `forex_enabled` flag in config settings under analytics config.
- Instead of passing `ExchangeRates` data structure now we are passing `Option<ExchangeRates>`
- In amount 
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(analytics): Analytics Request Validator and config driven forex feature (#6733)
Co-authored-by:
Files to modify:


**crates/analytics/src/lib.rs**
  Modify existing code

**crates/analytics/src/payment_intents/core.rs**
  Modify existing code

**crates/analytics/src/payments/core.rs**
  Modify existing code

**crates/analytics/src/refunds/core.rs**
  Modify existing code

**crates/api_models/src/analytics.rs**
  Add:
    - function: pub::requires_forex_functionality
    - struct: pub::AnalyticsRequest
    - trait: pub::ForexMetric
    - impl: impl AnalyticsRequest

**crates/api_models/src/analytics/disputes.rs**
  Add:
    - function: private::is_forex_metric
    - impl: impl ForexMetric for DisputeMetrics

**crates/api_models/src/analytics/payment_intents.rs**
  Add:
    - function: private::is_forex_metric
    - impl: impl ForexMetric for PaymentIntentMetrics

**crates/api_models/src/analytics/payments.rs**
  Add:
    - function: private::is_forex_metric
    - impl: impl ForexMetric for PaymentMetrics

**crates/api_models/src/analytics/refunds.rs**
  Add:
    - function: private::is_forex_metric
    - impl: impl ForexMetric for RefundMetrics

**crates/router/src/analytics.rs**
  Modify existing code

**crates/router/src/analytics_validator.rs**
  Add:
    - function: pub::request_validator

**crates/router/src/lib.rs**
  Add:
    - mod: pub::analytics_validator
{"issue_number": 6731, "pr_number": 6733, "commits_count": 1, "files_changed": 16, "response_length": 2201, "file_count": 14, "needs_breakdown": false}