Fix range violation for cartesianProduct of empty ranges.

Completes the fix for: https://issues.dlang.org/show_bug.cgi?id=10693
I think it should start with ```empty = false``` and set ```empty``` to ```true``` upon encountering an empty range, otherwise as long as there's one non-empty range you'll get undefined behaviour in ```front``` and ```popFront```.