WIP: Type promotion for keys and values for Dict merge

@wlbksy was puzzled by the current behaviour in #8877.  This PR does not affect `merge!`, but makes `merge` promote the key and value types if necessary for the returned dictionary.  Tests included.

Until I find a better way than what you see below to access the type parameters, this PR is to be considered work in progress.  I do feel slightly ashamed that my Julia/Google-fu has failed me when looking for a better solution.

    ktype{K,_}(d::Associative{K,_}) = K
    vtype{_,V}(d::Associative{_,V}) = V