Manual license sync doesn't work after initial sync for a day

### Problem

Once a license has been synced (through manual or automation) on a given day, no additional manual syncing works until the next report day.  This happens because the seat link sync request from the SM instance is [sent with a timestamp using the current time](https://gitlab.com/gitlab-org/gitlab/blob/63ef05526c260a0e8679a7acc9589e83a144f22e/ee/app/models/gitlab/seat_link_data.rb#L16).  In other words, each sync request will have a unique `timestamp` in the request.  A `date` param is also included in the payload which is derived from the date of the `timestamp` [here](https://gitlab.com/gitlab-org/gitlab/blob/63ef05526c260a0e8679a7acc9589e83a144f22e/ee/app/models/gitlab/seat_link_data.rb#L54).

In CustomersDot, [the `SeatLinkCreateService`](https://gitlab.com/gitlab-org/customers-gitlab-com/blob/d2a3c2aed8894dd660eed62cdcc323d2427205ec/app/services/seat_link_create_service.rb) is responsible for processing the sync request.  It is supposed to [look up an existing `LicenseSeatLink` record using `timestamp`](https://gitlab.com/gitlab-org/customers-gitlab-com/blob/d2a3c2aed8894dd660eed62cdcc323d2427205ec/app/services/seat_link_create_service.rb#L36) if present (which it would be on newer versions of EE), otherwise it uses the `date` param.  However, since the timestamp is different from the earlier sync, instead of finding/using the existing `LicenseSeatLink` record for that report date, the service initializes a new one.  When it attempts to save the record, it fails due to the [validation on `report_date`](https://gitlab.com/gitlab-org/customers-gitlab-com/blob/7cf930e839e6324c784ebd6e9319805eca2ca034/app/models/license_seat_link.rb#L8) which verifies uniqueness scoped to `order_id` and `self_managed_instance_activation_id`.

[Sample Sentry Error](https://sentry.gitlab.net/gitlab/customersgitlabcom/issues/2600316/events/6143dd6af3364209a21d85299b023d3f/)

### Proposal

This service should be updated to allow multiple syncs in a report day.  After discussing options with the team, we've agreed to the following plan as [mentioned here](https://gitlab.com/gitlab-org/customers-gitlab-com/-/issues/3163#note_585143061).

1. [x] Update the `SeatLinkCreateService` to find or create `LicenseSeatLink` records using `self_managed_instance_activation`, in addition to the existing fields (`report_timestamp|date` and `zuora_subscription_name`)
   * Created separate issue for this: https://gitlab.com/gitlab-org/customers-gitlab-com/-/issues/3184
   * MR: https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/3344 (Verified)
1. [x] Update the `CreateReconciliationService` to only update an existing reconciliation record if the new `user_count` is greater than the previous `user_count` ([code reference](https://gitlab.com/gitlab-org/customers-gitlab-com/blob/42318b047ab9c347277f9a9416e1ec0624187d3d/app/services/create_reconciliation_service.rb#L40)).
   * MR: https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/3352 (Verified)
1. [x] When a new seat link record is received, if the `report_timestamp` is not included in the request, set it to `report_date 03:00 UTC`.
   * MR: https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/3356 (Verified)
1. [x] Populate all existing rows where `report_timestamp is NULL` to set `report_timestamp` to `report_date 03:00 UTC`. Set DB constraint for `report_timestamp` to `null: false`.  Remove `report_timestamp` method from `LicenseSeatLink` model.
   * https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/3360 (Verified)
1. [x] Modify the 2 unique indices to use `report_timestamp` instead of `report_date`.
   * https://gitlab.com/gitlab-org/customers-gitlab-com/-/merge_requests/3363 (Verified)

In https://gitlab.com/gitlab-org/customers-gitlab-com/-/issues/3240, we will look at removing `report_date` from `license_seat_links` as it should no longer be needed.

Story points: 5.0