cartesianProduct
Returns every pairing of an element of this iterable with an element of other.
Pairs are ordered with the receiver as the outer loop, so all pairings of the first element come before those of the second. other is materialized once, so a single-pass iterable is safe to pass. Either side being empty yields an empty list.