Decouple code for mirroring, forking and importing
<!--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=216107)
</details>
<!--IssueSummary end-->
## Summary
Mirroring, forking and importing are different features but they are re-using some code to function.
## Improvements
The flow of code should be clearer given that we won't need to re-use models and methods. It'll be easier to read and understand.
## Risks
- The mentioned features may break.
- Increase in DB size as this may involve having separate `import_states` stable for each feature.
## Involved components
- `app/models/project.rb`
- `app/models/project_import_state.rb`
- `ee/app/models/ee/project.rb`
- `ee/app/models/ee/project_import_state.rb`
issue