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. 
     Before this fix, client caller doesn't receive error for the Send which throws, only subsequent sends receive error.
4). When Send returns a faulted task, client caller doesn't receive error for the Send.
     Before this fix, client caller doesn't receive error for the Send which throws, only subsequent sends receive error.

#3093
Shouldn't we still be testing ScaleoutStream.Send with an async faulted task?