Add sync.RWMutex protection to prevent concurrent map access:
- tfidf_engine.go: protect vocabulary and idf maps
- bm25_engine.go: protect vocabulary and idf maps
- markov_generator.go: protect chains and starters maps
- ensemble_system.go: prevent concurrent Train() calls
This fixes the bug where dates appeared in command_frequency
instead of actual commands, and eliminates 'concurrent map
read and map write' panics.