Type promotion for keys and values for Dict merge

Discussed in #8877.
Fix #8871

Mapreduce didn't work with `Range{BigInt}`, because the length wasn't a
`Int`, because of potential overflow. This patch just converts the
length to Int with a checked conversion, because a mapreduce on larger
arrays will probably never finish anyway.

Also fix some broken test of prod
Merge pull request #8883 from ninjin/dict_merge

RFC: Type promotion for keys and values for Dict merge
Merge pull request #8893 from JuliaLang/bigint_prod

Better fix for #8871
remove deprecation warnings in collection test
fix deprecated dict syntax in pkg tests
make #8784 work on Mac
export deprecation alias for String
Fix test for 32 bit

The test added in #8893 shouldn't use typemax(Int), but typemax(Int64)
check for and error early with cygwin or msys-target compilers

these are incapable of building libuv, but can build everything else
Document Cygwin-to-MinGW cross compilation

Replace old-and-busted MSYS1 instructions, no one should be using MSYS1 any more.