Update private ScaleoutStream.Send throw instead of calling SetError for the error to avoid the problem that stream will never be opened

Currently with Redis scale-out, once Send() method runs into an error, if the instance doesn't receive any message, then in the instance the stream will never be opened again until Redis is restarted. No connections in the instance can send a message. Instead they return the same error.

To avoid this problem,  here is the changes:
1). Update the private ScaleoutStream.Send throw the error instead of calling SetError when Send runs into exception.
2). Stream still keep Open, subsequent sends will not get affected by the error.
3). When Send throws exception, client caller receives error for the Send. 
4). When Send returns a faulted task and in the method which send to client uses await , client caller also receives error for the Send.
  
#3093
Why does that matter? Let's just regress this behavior and let the thing throw async.