Errors on Contact and OpportunityContactRole creation enqueue unnecessary retries of Opportunity creation

<!-- 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

Current logic in [`Salesforce::CreateOpportunityService`](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_service.rb) creates the [`OpportunityContactRole` object](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_service.rb#L118) right after creating the opportunity. Additionally, when creating the `OpportunityContactRole`, a [new Contact is created](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/contact_finding.rb#L14) if there isn't an existing one. This approach works for the most part but creates problems when an error is raised _**after**_ the opportunity is already created.

When there's an error during the creation of the `Contact` or `OpportunityContactRole`, the error is [rescued](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_service.rb#L26) and an unsuccessful response is returned to the `Salesforce::CreateOpportunityObjectsService`. This service then raises a [`Salesforce::OpportunityNotCreated`](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_objects_service.rb#L103) error and re-raises it so the job is retried. But since the creation of the opportunity is not failing, each retry of the job will then create **another opportunity**.

Another thing to note is that our opportunities are created in `Closed/Won` status [from the beginning](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_objects_service.rb#L98),  which doesn't allow us to find them in a subsequent retry because we expect to find an opportunity object with the same data (account_id, amount, type) **that is not Closed** in this [query](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_service.rb#L60-62). 

### Proposal

<!-- Consult with `@gitlab-com/business-technology/enterprise-apps/zuora-architects` on the ~"Enterprise Applications" team if Zuora business logic is involved. -->

:pushpin: We should be able to retry the job **only** when the opportunity creation fails. 

Introduce a new `Salesforce::OpportunityContactRoleNotCreated` error and raise it if  [`Salesforce::CreateOpportunityService#create_opportunity_contact_role`](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_service.rb#L134) fails. With this we can surface the actual object causing the error and have better visibility on the causes. Then, the error could be [rescued in `Salesforce::CreateOpportunityObjectsService`](https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/9ab555ef21be6742f2e58706db7037ee6e8dee52/app/services/salesforce/create_opportunity_objects_service.rb#L63) and given it is not `Salesforce::OpportunityNotCreated`, no retry should happen. 

:pushpin: Other things to explore

- Could we create the opportunity in a non-closed stage so a retry we could find that opportunity and attempt to complete it? 
- Should we handle the `OpportunityContactRole` and `Contact` creation in a different service so the `CreateOpportunityService` only handles the creation of the opportunity?

### Result

### Next steps (if any)

### How will we measure success?

We'll have less reports

Story points: 2.0