Fix promote_types for strings and numbers

String and number types should only be promotable to each other if their sizes match. Currently promote_types always returns the string type even if it's too small for the number type. Also, even if the string type size is larger than the number type size, the documentation for pomote_types says this should still fail.