def send_remote(name, *args, &blk)
      input = [remote_object_id, %Q{"#{name}"}, *args.map{|a| arg_to_string(a)}]
      serialized_block = ", #{block_to_string(&blk)}" if block_given?
      @io << "[[#{input.join(", ")}]#{serialized_block}]\n"
      process_result @io.gets.to_s.strip
    end
def send_remote(name, *args, &blk)
      input = [remote_object_id, %Q{"#{name}"}, *args.map{|a| arg_to_string(a)}]
      serialized_block = ", #{block_to_string(&blk)}" if block_given?
      @io << "[[#{input.join(", ")}]#{serialized_block}]\n"
      process_result @io.gets.to_s.strip
    end
Calls the passed method on the remote object with any arguments specified.
 Behaves the same as <code>Object#send</code>.

 If you pass it a block then it will append the block as a "lambda { … }".
 If your block returns a lambda string ("lambda { … }") then it will be passed
 straight through, otherwise it will be wrapped in a lambda string before sending.