BUG: properly handle references of objects in new np.where

Objects must go over the objects copyswap function and GIL must be taken
before dereferences for correct reference counting.
BUG: min_scalar_type_num: NaN can be represented in smallest float

E.g. pandas sometime uses float('NaN') which would otherwise converts to
float64 where not required. The new np.where which uses
PyArray_ResultType is a case where the conversion is unnecessary.