Extract http processing to allow different http clients

 * e.g. might prefer to use a client that caches, etc.
 * Enables writing your own for specific reasons