BUG/ENH: guarantee blocks will upcast as needed, and split as needed
         e.g. a replace on an IntBlock with a float will upcast, it may
         yield multiple blocks if the original IntBlock didn't fully replace

         small fix in com.mask_missing to guarantee that a bool ndarray is
         returned even in the case of a string comparison with a numeric array
         (which for some reason numpy returns a single, non-ndarray value)

BUG: py3 issue in com._maybe_promote for recognizing string types on number like dtypes!