API: Disallow NaN in StringArray constructor
Closes https://github.com/pandas-dev/pandas/issues/30966

~There were a few ways we could have done this. I opted for this way since it still only requires a single pass over the data to validate the values. Other ways like checking for `np.isnan` after checking `is_string_array` would have required a second pass.~

I changed the implementation in subsequent commits. The basic idea is the same, don't allow NaN in the array passed to StringArray, so that we only make a single pass over the data. We do this by changing `StringValidator.is_valid_null` to only allow NA. This required a small change to `PandasArray._from_sequence`, since previously we relied on creating a temporarily invalid StringArray before doing an inplace `__setitem__` to replace NaNs with NA.

cc @tsvikas.

Actually, we don't use `is_string_array` in all that many places, and I don't think it's public, so perhaps I can just make the change to exclude NaN / None. Will explore. thanks @TomAugspurger 