1. core_service.go: Return error when SetLanguage fails instead of
silently discarding it.
2. grammar.go/service.go: Add MergeGrammarData() and use it in AddLoader
and loadJSON so multiple loaders merge grammar entries instead of
replacing the entire struct per language.
3. service.go: Document that package-level AddLoader is superseded when
NewCoreService replaces the default — by design, not a bug.
4. service.go: Use CompareAndSwap in Init() to prevent TOCTOU race where
a concurrent SetDefault could be overwritten.
Co-Authored-By: Virgil <virgil@lethean.io>