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: special float values can be represented in half

E.g. pandas sometime uses float('NaN') which would otherwise convert to
float64 where not required. The new np.where which uses
PyArray_ResultType is a case where the conversion is unnecessary.
DOC: document special float scalar casting change in release notes
Merge pull request #4215 from juliantaylor/where-obj-fix

BUG: fix reference count, thread safety and dtypes of np.where