BUG: allow numpy.array as c values to scatterplot

Ensure that we can pass an np.array as 'c' straight through to
matplotlib, this functionality was accidentally removed previously.

Add tests.

Closes #8852
Personally, I would not expect `is_hashable` to use `collections.Hashable` (if you wanted that, you could just do the isinstance check). So this implementation does not surprise me, at least. Also, I'm pretty sure the Python docs explicitly state that `__hash__` is supposed to be cheap to evaluate.