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
