Fix Issue 10460 - auto ref Union, SetDifference, SetSymmetricDifference

https://issues.dlang.org/show_bug.cgi?id=10460

The rearrangement of SetSymmetricDifference.front was needed since auto ref doesn't deduce correctly when there are multiple return statements (by design), so a single return statement with the ternary operator was used.
You can choose whether you stop before or at the sentinel. If you choose to stop at the sentinel then it will stop the range early. Bad things will also happen with `SetSymmetricDifference` if you modify the elements in a way that will mess with the ordering.

I can see why this might be reason to return by value, but it doesn't really help matters. The 'value' returned might be a reference type, so all the same pitfalls exist. You could also just modify the underlying range manually if you wanted. There are many valid and safe things you can do with an L-value, so I think there is value in providing it.