Issue #3574756: Per-block content sources and optional AI overrides
Move content_sources from global config to per-block configuration. Each block instance now carries its own content sources and can optionally override global AI settings (provider, model, prompt, etc.).
- Add ContentSourceFormTrait for shared form helpers
- Add block_instance_id (auto-generated UUID) per block instance
- Add content_sources and AI override fields to block config
- Update ContentIndexer to build superset from all block instances
- Update ChatService to accept config as parameter
- Update ChatApiController to resolve block config by instance ID
- Update JS to support multiple independent chatbot instances
- Add update_10003 to remove content_sources from global config
- Trigger re-indexing via hook_block_update/insert after save
Closes #3574756