Uncommented stuff that was commented out due to bug 9947.

Kenji missed a couple of lines of commented out code in hasSlicing, so
this commit uncomments them now that bug 9947 has been fixed.
Merge pull request #1110 from jmdavis/hasSlicing

Uncommented stuff that was commented out due to bug 9947.
Preliminary implementation of cartesianProduct.

For the case of two infinite ranges, use Andrei's schedule of traversing
right and bottom edges of an increasing square area over the infinite
table of combinations. This allows us to only need to traverse each
range in one direction, so only forward ranges are needed.
Add cartesianProduct to cheatsheet.
Replace unittests to avoid issue 8542.
Improve unittests.

Make unittests independent of exact order of pairs produced by
cartesianProduct.

Add unittest for cartesian product of two finite ranges.
Delete unrelated line.
Fix -property errors.
Merge pull request #856 from quickfur/cartprod

Implement std.algorithm.cartesianProduct
Update docs.
Merge pull request #1111 from quickfur/cartprod_doc

Update cartesianProduct docs.
Consolidating forward range requirements

Because returning anything other than an *exact* type match messes everything up. This is particularly true in the sense that "saved" ranges are usually passed directly to a function, so not cast back to the original.
Fixes Issue 8837 - BigInt needs better operator constraints.
Merge pull request #1112 from AndrejMitrovic/Fix8837

Issue 8837 - BigInt needs better operator constraints.
Merge pull request #1008 from monarchdodra/save

Consolidating forward range requirements