Shift validations in Integrations::Base::Integration to models
<!--IssueSummary start-->
<details>
<summary>
Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards.
</summary>
- [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=501520)
</details>
<!--IssueSummary end-->
The following discussion from !170439 should be addressed:
- [ ] @.luke started a [discussion](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/170439#note_2186860731):
> **Thought**
>
> Once we've moved instance integrations out of the `integrations` table, it would be worth moving some of these validations out of the shared module and into the classes so `Integration` has different validations from `Integrations::Instance::Integration`.
>
> For example, `Integrations::Instance::Integration` could validate that `instance` is always `true`, and `project_id` and `group_id` are always `nil`. `Integration` could validate that `instance` is always `false` and that `project_id` or `group_id` are present, and so on.
There would be other things we can do too, like:
- Remove `Integrations::Base::Integration#instance_level?` and add a method `Integration#instance_level?` which returns `false` in `Integration`.
- Move `Integrations::Base::Integration#parent` to `Integration` and add a method `Integrations::Instance::Integration#parent` which returns `nil`.
issue