remove unused indirection for ftp proxy config

the FTP backend is only used when uri.scheme == "ftp", so there is no
need to add extra indirection around looking up config settings for ftp
proxying. Remove indirection in favor of explicitness and simplicity.
extract mtime and etag selection to methods

* extract methods to keep the #fetch method at one level of abstraction
  and shorten it.
* remove debug statements--all Headers in the response are printed in
  debug mode, so the debug statements were redundant.
Remove mock/stub of value objects

Result class is a simple value object, it does not need to be mocked out
in the tests, and doing so prevents us from testing an important
integration point.
don't use client time for If-Modified-Since

RFC 2616 notes recommend caution when using client-side time for
If-Modified-Since due to potential time skew and other issues. The RFC
further suggests that servers that do not include Date headers in
responses may not have reliable timekeeping. This suggests that we
should not try to use If-Modified-Since when accessing resources on such
servers rather than falling back to local time.

In addition to addressing mtime issue above, add tests for all header
handling in the remote file HTTP implementation.
remove mock/stubs for value objects

Favor testing integration points by using real objects when there is no
interaction with the outside world over mocking all collaborators. False
positives from "extra" broken tests are favorable to false negatives
that occur if the API of a collaborator changes.
Add test coverage for updated URI case

Add assertions that etag and If-Modified-Since are not used when
fetching from a URI other than the one used to fetch the file
previously.

Additionally mark tests as pending for etag/last modified. According to
RFC, BOTH should be sent if available, but this is not current behavior.
Add cache control data to remote file HTTP backend

Add new implementation of cache control header generation in remote file
HTTP backend. Will replace existing code in the constructor.
remove provider loading of cache control data
Implement cache control data storage
move cache control data management out of provider

completely remove cache control data management from remote file
provider, it's now managed at the per-protocol implementation layer.
Enable conditional GET by default

The upside of this is that users who have not specified a checksum on
their remote file resources will automatically get the benefit of
conditional GET to reduce file fetching as long as the origin server
supports it.

The risk is that some origin servers may have incorrectly implemented
HTTP and do the wrong thing with the cache control headers. We suspect
this should only be the case for a very small minority of users, who
will be able to opt out of the new behavior.
extract cache control data class to its own file
Add API documentation to CacheControlData
ensure HTTP backend sets cksum on cache control data
remove etag/mtime responsibilites from content class

This is handled by each protocol-specific back-end that chooses to
implement it.