BUG: Convert non-array rhs for boolean assignment with correct dtype

Enforcing the left hand side datatype for a non-array right hand side
argument in index assignments was the behavior before 1.7. and is the
general behaviour here. (note this means a non-array right hand side
checks for NaN, etc. if the left hand side is integer, but an array
right hand side does not)

Also make sure unsafe casting is used with __array_interface__
BUG: Make 1d fancy indexing special case use unsafe_casting

Also make sure right hand side is converted safely to the right
type if it is not an array though.