Const fixes in Zip and Lockstep

Spliced from https://github.com/D-Programming-Language/phobos/pull/1010

Mainly, they accepted the types R, provided Unqual!R is a range. But that's wrong.

Reduced to only accepting if R itself is a range.

Improved constraints, fixed implementations details, removed needles bug workaround (4676, 4652 & 6336).