promotion: symmetrize promotion rules recursively with promote_type.

If promote_rule(T,S) and promote_rule(S,T) disagree, call promote_type
again on the results to get a single common answer. This can resolve
cases where there is a conflict between two such rules, making the
promotion system a bit more robust.
math constants: simplify and generalize promotion with constants.
further promotion rule simplifications
Merge pull request #5466 from JuliaLang/sk/promote

promotion: symmetrize promotion rules recursively with promote_type.