Network, cache and user response types.

Change the internals to handle user, network and cache requests and
responses. Expose the network and cache responses in the API, so that
clients can see which responses were cached, network, and conditionally
cached.

This is intended to replace ResponseSource.