Interleaving for unions with infinite sets

Fixes #8342 
Unions with infinite elements now interleave.
Uses the roundrobin recipe from the documentation for itertools:
https://docs.python.org/2/library/itertools.html#recipes

```
>>> solns = solve_univariate_real(sin(x), x)
>>> solns
ImageSet(Lambda(_n, 2*_n*pi), Integers()) U ImageSet(Lambda(_n, 2*_n*pi + pi), Integers())
>>> for i in zip(solns, range(10)):
...  print i
... 
(0, 0)
(pi, 1)
(2*pi, 2)
(3*pi, 3)
(-2*pi, 4)
(-pi, 5)
(4*pi, 6)
(5*pi, 7)
(-4*pi, 8)
(-3*pi, 9)
```
Tthe FiniteSets (there may be more than one) could be separated out and then the rest roundrobined something like:

```
from sympy.utilities.iterables import sift
sifted = sift(self.args, lambda a: a.is_FiniteSet)
if sifted[True]:
    for i in Uniion(*sifted[True]):
        yield i
if sifted[False]:
    for i in roundrobin(*(iter(s) for s in sifted[False])):
        yield i
```

But I think it would be better to always roundrobin. (And hopefully Union, with evaluate=True, arranges items in a canonical manner. If not use or ordered might be in order.) @asmeurer, why did you suggest that the interleave should only be done if there were no FiniteSets? e.g. `Union(FiniteSet(1,3), ImageSet(Lambda(x, 2*x), S.Naturals))`