Splitting analyze and build phases in Security Products analyzers
### Problem to solve
Our [many analyzers](https://gitlab.com/gitlab-org/security-products/analyzers) currently do more than just analyze users' code. Due to the necessity of building projects and/or pulling in dependencies in many cases, we must run such commands as `yarn install` or `mvn compile` to ensure all dependencies and targets exist prior to running a security scan. This is largely an automatic task yet in many cases a user wants to disable the build step or specify a special build configuration, see examples:
* `Python project dependency check failed` https://gitlab.com/gitlab-org/gitlab-ee/issues/6713
* `Retire.js analyzer needs node_modules directory` https://gitlab.com/gitlab-org/gitlab-ee/issues/9291
### Intended users
~"Persona: Software developer" ~"Persona: DevOps Engineer"
### What does success look like, and how can we measure that?
* Users have an explicit understanding of how our scanners both build and scan projects
* Users can easily override the build stage for their framework/language using the same method across all scanners
### What is the type of buyer?
~"GitLab Ultimate"
epic