If we change the terminal settings as a result of hSetBuffering or
hSetEcho, then restore them again in hs_exit(). This is just good
citizenship on Unixy platforms.
We *don't* just automatically save the terminal settings and restore
them at the end, because that would prevent implementing stty-like
programs in Haskell. This scheme is a compromise that hopefully DTRT
in most cases.