ENH: allow for custom controller.

This simple PR allows for an adapter to take a custom controller.

The rationale is that for legacy reasons, I may have to support etag caching where I ignore the query string (think secured s3 entries). The simplest way seems to have my own controller subclass that passes a different key to the underlying cache