Issue:
[FEATURE] separate payments_session from payments core

### Feature Description

In the current implementation, the [payments_session](https://github.com/juspay/hyperswitch/blob/main/crates/router/src/core/payments/operations/payment_session.rs) is a part of [payments core](https://github.com/juspay/hyperswitch/blob/main/crates/router/src/core/payments.rs) logic. This was done to reuse certain parts of code which would avoid redundancy, this would also be maintained along with the payments core. The major anamoly from the core logic would be that multiple connectors would be called in parallel.

### Possible Implementation

As we have come a long way in our journey of integrating the connectors / gateways, we have not come across any connector / gateway, where the session token generation ( required to initiate the sdk ) logic, is tied to a payment flow. It would be better to have this logic separated from the core logic. This would help us in
- Deploying it separately since this will have many reads 
- Flexibility to add changes without any breaking changes to the payments logic.
- No routing support is required.

This can be implemented as a separate function as which would perform the required functionalities. This can be build in a similar way to [payment_method_list](https://github.com/juspay/hyperswitch/blob/main/crates/router/src/core/payment_methods/cards.rs#L784) api. Additional step would be to call the connector whenever necessary.

### Have you spent some time to check if this feature request has been raised before?

- [X] I checked and didn't find 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?

No, but I'm happy to collaborate on a PR with someone else

Resolution:
<think>
PR Context:
- Title: refactor(core): move update trackers after build request
- Merged: 2023-06-19T07:59:57Z
- Files changed: 30 files
- Commits: 8 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [x] Refactoring

## Description
<!-- Describe your changes in detail -->
Update trackers has been moved before callling the connector. This is to make sure that if there is any validation error, then the payment status will not be updated. 
For other flows where connector does not need to be called ( except `session_token` flow, there is an issue to move it outside payment core #888), it will be called as normal.


## Mo
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** refactor(core): move update trackers after build request (#1472)
Files to modify:


**crates/router/src/connector/airwallex.rs**
  Modify existing code

**crates/router/src/connector/nuvei.rs**
  Modify existing code

**crates/router/src/connector/shift4.rs**
  Modify existing code

**crates/router/src/core/disputes.rs**
  Modify existing code

**crates/router/src/core/files/helpers.rs**
  Modify existing code

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

**crates/router/src/core/payments/access_token.rs**
  Modify existing code

**crates/router/src/core/payments/customers.rs**
  Modify existing code

**crates/router/src/core/payments/flows.rs**
  Modify existing code

**crates/router/src/core/payments/flows/authorize_flow.rs**
  Remove:
    - enum: pub::Action

**crates/router/src/core/payments/flows/cancel_flow.rs**
  Modify existing code

**crates/router/src/core/payments/flows/capture_flow.rs**
  Modify existing code

**crates/router/src/core/payments/flows/complete_authorize_flow.rs**
  Modify existing code

**crates/router/src/core/payments/flows/psync_flow.rs**
  Modify existing code

**crates/router/src/core/payments/flows/session_flow.rs**
  Modify existing code

**crates/router/src/core/payments/flows/verify_flow.rs**
  Add:
    - function: private::build_flow_specific_connector_request

**crates/router/src/core/payments/operations.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_cancel.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_capture.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_complete_authorize.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_confirm.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_create.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_method_validate.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_session.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_start.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_status.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_update.rs**
  Modify existing code

**crates/router/src/core/payments/tokenization.rs**
  Modify existing code

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

**crates/router/src/services/api.rs**
  Modify existing code

**crates/router/tests/connectors/aci.rs**
  Modify existing code

**crates/router/tests/connectors/utils.rs**
  Modify existing code