v3. Passing around an opener function was clunky, so I've opted for passing around contact params instead. I've also gone back to explicitly setting the coding to binary because folks may not be using `url-open-stream' (which does this indirectly by let-binding `coding-system-for-{read,write}').