Fix unicode in `write()`, support non-string args. 

I don't think this should be a problem API-wise:

 * The `write()` method signature was a variable number of string arguments, and this still works as is.
 * Other argument types were previously not supported. Now they are stringified and bufferified.
 * The `write()` method return value was `undefined`, but now returns the underlying socket `write()` method return value. (A boolean whether the data was immediately flushed.)

So if this breaks anything, they were doing funky unsupported stuff.