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)...)
Merge branch 'master' of github.com:JuliaLang/julia