Use new cartesianProduct implementation for 2-argument case as well.

The original implementation will now only be used when one or both the ranges is either non-forward or infinite. The new implementation is also more attribute-friendly (works with pure, nothrow, @nogc, @safe), so this also fixes [issue 13091](https://issues.dlang.org/show_bug.cgi?id=13091).
This change is unrelated to bug 13091, but the bug number was showing up in the Phobos docs, which is out-of-place and annoying. So move it to a place where it won't show up in the docs.