Feature http client

This allow to replace the http logic with any other implementation. And thus allow the usage of caches at the HTTP level. I replaced the Client::fetch calls from within Client itself but don't removed the Client::fetch method and just make it a proxy to the new HttpClient to avoid BC change introduction.