Specifically, I want to make sure that it's easy to disable nagle. I'm worried that if all we allow is merging overrides with defaults, then you'll need to jump through hoops to change remove all socket options (which should be the easiest operation IMO).

I'm more inclined to do a list of tuples than a dict of tuples—it's clearer what's going on. urllib3 is more lower-level so we try to be fairly clear about the underlying mechanisms rather than hide them altogether. (Nagle was kind of an exception to that, which I'm happy to fix.)

As for merging, could just toss the list of tuples into a set and let it sort itself out? :P