Fix issue with Kernel#silence_stream leaking file descriptors

Calling Kernel#silence_stream creates a new file descriptor which isn't
closed after it is used. As a result calling silence_stream multiple
times leads to a build up of loose file descriptors and can cause issues
in environments where garbage collection isn't run often.
Merge pull request #12684 from mariovisic/fix_kernel_silence_stream_descriptor_leak

Fix issue with Kernel#silence_stream leaking file descriptors