Stop storing bad reponses in cache

Two new things on the API wrapper.

- `WithCheckXmlValidity` will do a full parse on the response body. Use this on endpoints that are currently unreliable, and the cost of the parse is less than the result of caching a bad response. e.g.

`var translations = Api<Translations>.Create
        .WithCheckXmlValidity()
        .Please()`

- `WithCache(ICache cache)` this is to lift the caching out of `HttpClientWrapper` so that we can  only cache responses after they have passed all applicable validation. The website currently replaces `HttpClientWrapper` with a caching decorator. The website would do `Api<Translations>.Create.WithCache(webCache)` instead.

What do you think? The way that cache keys are generated is probably too simple, but is there for illustration.