add socket:xread, socket:xwrite, and socket:xlines, which take a fixed number of arguments
fix buffering semantics in :xwrite