Fix issue 12007 - cartesianProduct does'nt work with ranges of immutables

The fix consists in making Repeat!T assignable, even if T itself is not.
Fix issue 12007 - cartesianProduct does'nt work with ranges of immutables

https://d.puremagic.com/issues/show_bug.cgi?id=12007

This makes a tweak to `Zip`'s `save`: Now, it *builds* a new `Zip` object
from the saved ranges, rather than assigning each range individually.

This gives 2 advantages:
1. Better support for `save` (which doesn't actaully guarantee assignability)
2. Avoids useless `opAssign` overhead
Simplify Zip's constructor
Merge pull request #1897 from monarchdodra/12007-2

Fix issue 12007 - cartesianProduct doesn't work with ranges of immutable...
Merge pull request #1895 from monarchdodra/12007

Fix issue 12007 - cartesianProduct does'nt work with ranges of immutable...
[Refactoring] Make helper template names short
fix Issue 10502 - Can't get fullyQualifiedName of a templated struct
Add sum to `std.algorithm`'s TOC
Merge pull request #1971 from monarchdodra/sumTOC

Add sum to `std.algorithm`'s TOC
Merge pull request #1967 from 9rnsr/fix10502

Issue 10502 - Can't get fullyQualifiedName of a templated struct