The issue here is contexts were introduced after the API for `http.NewRequest()` was guaranteed to be stable, so there are in effect (2) different versions of the api, one without contexts and one with.
IMHO it's a rock and a hard place; either you break compatibility, or you have a slightly more confusing API.