BCP 47 support in article upserts

The language field on the article object in the upsert API now supports BCP 47 language tags (e.g., en-CA, fr-FR). The previously supported locale field is deprecated but still accepted for backwards compatibility if language is not provided.

API responses from GET /v2/knowledge/articles and GET /v2/knowledge/articles/{id} will continue to return locale, but it is no longer documented. In these responses, the language field contains the ISO 639-1 two-character language code, not the full BCP 47 tag.

This is part of a gradual migration. Eventually, locale will be removed from both persisted records and API responses, and language will consistently use BCP 47 tags across all endpoints.