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
This is to enable client caller to receive the error when QueuingBehavior is set to Always and Send throws exception and the method which send to client doesn’t use await/ Wait(), 
without  this, client caller only can receive the error when the method use await/ Wait().