juliatypes.jl: implement exhaustive search over unions
currently this breaks unions in varargs
we also need to handle multiple lexical occurrences of the same Union, e.g.
U = Union(Int,Int8); (U, U, U)
since I'm replacing Unions based on object id. hopefully this fix can also
restore varargs, by recording multiple occurrences of the union in
(A, B, C) <: (Union(C,D)...)