I think the `byXXXImpl` structures can be made into forward ranges by adding the `save` member?

```D
static if (isForwardRange!R)
    @property auto save()
    {
        auto ret = this;
        ret.r = r.save;
    }
```
At least, I don't see any problems against it.