BUG: Segfault due to float_precision='round_trip'
`round_trip` calls back into Python, so the GIL must be held.  It also fails to silence the Python exception, leading to spurious errors.

Closes #15140.

 - [x] closes #xxxx
 - [x] tests added / passed
 - [x] passes ``git diff upstream/master | flake8 --diff`` (*Most of them are false positives because flake8 doesn't understand Cython or it was code I didn't even touch*)
 - [x] whatsnew entry

## [Current coverage](https://codecov.io/gh/pandas-dev/pandas/pull/15148?src=pr) is 85.54% (diff: 100%)


> No coverage report found for **master** at d50eaa8.

> Powered by [Codecov](https://codecov.io?src=pr). Last update [d50eaa8...652c14c](https://codecov.io/gh/pandas-dev/pandas/compare/d50eaa8ac6e18a64d9fa403e8e263344a5208227...652c14ce31a0cee415098526c2578e782774702e?src=pr) Updated. lgtm
ping on green thanks @Rufflewind 