Order actions: service to add a product to a subscription (amendment)

<!-- Please complete the template below as best as you can. Make sure to check if this issue has already been raised by someone else first to avoid duplication. 

For each section below, please add screenshots or links or anything that may help visual learners understand the problem better, even if this takes you an extra minute or two this is a great help to some folks.

https://www.learning-styles-online.com/style/visual-spatial/

-->

### Problem

CDot uses the Zuora's amend subscription API for at least the following use cases:

  - [remove a product](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/c5b1db13d4af8db292118c2227c696c1ee8f61c2/app/services/amendment_base_service.rb#L39) ([downgrade main product](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/main/app/services/amend_subscription_service.rb#L30))
  - [add a new product](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/c5b1db13d4af8db292118c2227c696c1ee8f61c2/app/services/amendment_base_service.rb#L45) ([upgrade main product](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/main/app/services/amend_subscription_service.rb#L30))
  - [renew subscription](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/c5b1db13d4af8db292118c2227c696c1ee8f61c2/app/services/amend_subscription_service.rb#L139)
  - [apply true ups](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/c5b1db13d4af8db292118c2227c696c1ee8f61c2/app/services/amend_subscription_service.rb#L32) (add a new product)
  - [update product](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/c5b1db13d4af8db292118c2227c696c1ee8f61c2/app/services/amend_subscription_service.rb#L33)

Although they are all amendment actions, in the Orders API each of it are **different** Order actions and their payload varies.

In this issue, we will focus on creating a service to [Add a Product to a subscription](https://knowledgecenter.zuora.com/Billing/Subscriptions/Orders/AC_Orders_Tutorials/A_Add_a_Product_to_a_Subscription?_ga=2.166350910.1673435247.1652906974-397155918.1648069381&_gl=1%2A5yur29%2A_ga%2AMzk3MTU1OTE4LjE2NDgwNjkzODE.%2A_ga_MY8CQ650DH%2AMTY1MjkwNjk3Mi41Ni4xLjE2NTI5MDgyMjMuMA..).

### Proposal

<!-- Consult with `@gitlab-com/business-technology/enterprise-apps/zuora-architects` on the ~"Enterprise Applications" team if Zuora business logic is involved. -->

In the module `app/services/zuora/orders/actions`, create a service class `AddProduct`.

The service implements the following:
  * inherits `Zuora::Orders::Actions::BaseService`
  * defines `.execute` method that accepts `params` and instantiates an object of the class and invoked `#execute`
  * defines `#execute` method

The `#execute` method constructs `orderAction` object to add a product to a subscription, with the below parameters:

|Parameter|Type|Description|
|---|---|---|
|`type`|String|Constant value: `AddProduct`|
|`triggerDates`|Array of Objects| Each object has the keys: `name` and `triggerDate`. </br> Defines `ContractEffective`, `ServiceActivation` and `CustomerAcceptance` dates|
|`addProduct`|Object|Defines `productRatePlanId` and `chargeOverrides` (see example payload below)|

The params are set in accordance to the current logic for adding a new product in `AmendSubscriptionService`

<details>
<summary> Example return object: </summary>

```json
{
  "orderDate": $Today,
  "existingAccountNumber": $AccountNum,
  "subscriptions": [
    {
      "subscriptionNumber": $SubscriptionNum,
      "orderActions": [
        {
          "type": "AddProduct",
          "triggerDates": [
            {
              "name": "ContractEffective",
              "triggerDate": $Today
            },
            {
              "name": "ServiceActivation",
              "triggerDate": $Today
            },
            {
              "name": "CustomerAcceptance",
              "triggerDate": $Today
            }
          ],
          "addProduct": {
            "productRatePlanId": $ProductRPId,
            "chargeOverrides": [
              {
                "productRatePlanChargeId": $ProductRPChargeId,
                "pricing": {
                  "recurringFlatFee": {
                    "listPrice": 10
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ],
  "processingOptions": {
    "runBilling": false,
    "collectPayment": false
  }
}
```

</details>


### Result

The service constructs the `orderActions` object to add a new product to a subscription.

### Next steps (if any)

The service is used in `OrderManagerService` to add a new product to a subscription.

### How will we measure success?

Story points: 2.0