- Add abogen/domain/voice_loader.py with:
- VoiceCache class: unified cache for loaded voices
- resolve_voice(): load voice with optional caching
- load_voice_cached(): compatibility wrapper for PyQt
- Update abogen/pyqt/conversion.py:
- Replace load_voice_cached method body with call to domain function
- Maintain backward compatibility with existing interface
- Add tests/test_voice_loader.py with unit tests for VoiceCache and voice loading