* Operations on file handles, file names, and buffers are now global.
This prevents errors due to groups.
* `\pydatasetfilehandle`, `\pydatareleasefilehandle`, `\pydatasetfilename`,
and `\pydataclosefilename` are redesigned to deal with cases where the same
file is opened, written, closed, and then later reopened and overwritten.
`\pydatasetfilename` now reuses file handles when the same file is
opened and closed multiple times. `\pydataclosefilename` no longer
attempts to close files `\AtEndDocument`, since that can interfere with
files that need to remain open as long as possible.
* Added new commands `\pydatawritekeyedefvalue` and
`\pydatabufferkeyedefvalue`. These `\edef` the value before interpreting
it as verbatim text.
* Simplified implementation of `pydatabuffermlvalue` environment, based on
latest `fvextra`.
* Added error messages for unknown file handles and file names.
* Added additional state and data checks in `\pydatawritebuffer`.
* Added documentation for `\pydatawritemlvaluestart`,
`\pydatawritemlvalueline`, `\pydatawritemlvalueend`,
`\pydatabuffermlvaluestart`, `\pydatabuffermlvalueline`,
`\pydatabuffermlvalueend`.
* Updated `tcblisting` usage in docs for compatibility with the latest
`tcolorbox`.