ENH: Explicit range checking when writing Stata
 - [X] closes #14618
 - [X] tests added / passed
 - [X] passes ``git diff upstream/master | flake8 --diff``
 - [X] whatsnew entry

Add explicit error checking for out-of-range doubles when writing Stata files

closes #14618
@jreback That doesn't work since it is `True` for `np.float32`.
 Changed the approach and also added check for `float32` column range with upcast if needed.
 ## [Current coverage](https://codecov.io/gh/pandas-dev/pandas/pull/14637?src=pr) is 85.28% (diff: 100%)

> Merging [#14637](https://codecov.io/gh/pandas-dev/pandas/pull/14637?src=pr) into [master](https://codecov.io/gh/pandas-dev/pandas/branch/master?src=pr) will increase coverage by **<.01%**

``` diff
@@             master     #14637   diff @@
==========================================
  Files           140        140          
  Lines         50693      50706    +13   
  Methods           0          0          
  Messages          0          0          
  Branches          0          0          
==========================================
+ Hits          43235      43247    +12   
- Misses         7458       7459     +1   
  Partials          0          0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last update [726efc7...55a98f5](https://codecov.io/gh/pandas-dev/pandas/compare/726efc7cd55744eb88636dd6f11293f18355a10a...55a98f5d8f2e6c723a2c68198790d36eb3fbfbfe?src=pr)
 Need to check behavior of infs/-inf, as well as NaN in Stata.  It might support these values.
 so infs are not allowed in state at all?
 `+inf` is a missing value, appears in Stata the same as `NaN` (denoted with a `.`). Basically Stata always uses the largest representable numbers as missing values, and everything above the upper cutoff for a double is a missing value.  I think users who with to express a missing value in Stata should be forced to use `NaN` which exports fine.

`-inf` is allowed
 ok, that's fine then. 
 thanks!
