Allow complex pointers to real arrays and vice-versa

It is unfortunate that it is still not possible to write this operation in an equivalent standard-conforming way.

c(j,j)%re = c(j,j)%re + dot_product(a(:,j)%re,b(:,j)%re) + dot_product(a(:,j)%im,b(:,j)%im)

is close, but there are two function calls instead of one. Also, I remember a previous discussion about %re and %im where some compilers generate temp arrays for the argument association, which would be problematic for efficiency.