This wrapper is used to catch and suppress BrokenPipeErrors resulting
from .flush() being called on broken pipe during the shutdown/final-GC
of the Python interpreter. Notably .flush() is always called on
sys.stdout and sys.stderr. So as to have minimal impact on any
other cleanup code, and the case where the underlying file is not a broken
pipe, all calls and attributes are proxied.