Make say and say_status thread safe.

The current `IO.puts` implementation makes two separate writes: one
for the message and another for the newline char when necessary.

Having multiple threads calling `puts` can lead to interleaved
messages with repeated newlines in the output.