Remove temporary repository language ID fallbacks

Part of &23254. Follow-up to #614125 (closed), #614131 (closed), #614133 (closed), and #614143 (closed).

Why

These issues keep temporary fallbacks to programming_language_id while repository_languages.language_id may still be NULL.

In 19.6, after the language_id backfill and NOT NULL validation are complete, we can remove the fallbacks and consistently use the stable language_id.

What to change

  • Use language_id only in the project programming-language scopes from #614133 (closed).
  • Keep a single RepositoryLanguage#programming_language association keyed by language_id, and simplify its preloading, from #614125 (closed).
  • Use language_id only for language-detection updates and deletions from #614143 (closed).
  • Remove the old programming_language uniqueness validation and require language_id in the validation from #614131 (closed).
  • Remove or update tests that cover the temporary fallback behavior.

Prerequisites

  • The repository_languages.language_id backfill is complete.
  • The NOT NULL constraint is validated (see !247554 (merged)).