add range version of setExtension

Since Walter is being unresponsive, I'm hijacking his [original PR](https://github.com/D-Programming-Language/phobos/pull/2149). This PR basically uses Walter's code as base, and adds some fixes on top per reviewers' comments.
DIdn't we bikeshed over this in the forums already in that long interminable thread? Should we start another rainbow session on the forum to decide on the name?