Require the WebSocket Transport make an /abort request to abort

- Avoids timeouts being mistakenly registered as aborts
- Unifies abort logic for all transports

#2195 #1231

#2500
Made some websocket improvements.
Catch and log errors on send.
Made some more changes to the WebSocketHandler and client websocket.

- Prevent double dispose on the client side WebSocketTransport.
- Always close the websocket before cancelling the token on the server.
Make all DefaultWebSocketHandler operations noop after it's closed.

- Added tests that verify it noops after closing.
- Made the WebSocket property internal to ensure it's not used by another other code.

#2457
Added some websocket tests.
Made some websocket fixes.

- Create a new cts for each websocket created.
Made closed volatile
ASP.NET does not support async void methods.
Handle errors thrown by the websocket transport loop.