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)
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.