PERF: pass through to numpy validation for iloc setitem
We lose a little bit of ground on the range and slice (not really sure why), pick up a bigger amount of ground on list or ndarray.

```
In [3]: ser = pd.Series(range(10**5))                                                                                      
In [4]: key = range(100, 200) 
In [5]: key2 = list(key)
In [6]: key3 = slice(100, 200)                                                                                             
In [7]: key4 = np.array(key2)                                                                                                 

In [16]: %timeit ser.iloc[key] = 1
56.3 µs ± 1.19 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- master
62.9 µs ± 1.77 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- PR

In [17]: %timeit ser.iloc[key2] = 1
95.6 µs ± 2.69 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- master
55.6 µs ± 922 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- PR

In [20]: %timeit ser.iloc[key3] = 1
49 µs ± 756 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- master
50.6 µs ± 1.01 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- PR

In [21]: %timeit ser.iloc[key4] = 1
71.6 µs ± 1.98 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- master
45.7 µs ± 427 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)  # <-- PR
```