Allow mixed types for pow(), as long as the exponent is exactly representable in the base type.
Reference issue
What does this implement/fix?
The current implementation of unary_pow break many existing codes because of the hard constraint that base type == exponent type for floating point types. Promoting the exponent from float to double is safe. This change is an attempt to write this in a general way, so we can add support for mixed pow() for more types on the future, such as pow(double, bfloat16).