refactor Voice handling (cache JSON), add voice matching
- voice matching is based on locale and gender
- require strict matching or voices (404)
Compute Etag and synthesize only if Etag is not matched.

The Etag is computed based on the notion that all of the parameters:
- Sample Rate
- VoiceSpec
- Input message

uniquely describe the synthesized utterance.