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
BLD: Fix ANSI C syntax error

Fixes msvc9/10 error C2143: syntax error : missing ';' before 'type'
TST: fail on declaration-after-statement in travis test

required for windows compilers
TST: test non integer item does not return array

from gh-4223 in the 1.8 branch
Merge pull request #4215 from juliantaylor/where-obj-fix

BUG: fix reference count, thread safety and dtypes of np.where
TST: test count_nonzero on unaligned memory
Merge pull request #4232 from juliantaylor/check-win-compile

TST: fail on declaration-after-statement in travis test