Upgrade events
- WebSocketBehavior now takes .upgrade handler for catching HTTP-to-WebSocket upgrade requests. This can be used to perform HTTP-level authentication before the HTTP connection is upgraded to WebSocket. Not everyone wants to, or can, authenticate via WebSocket messaging.
- As part of this addition, .open handler no longer takes HttpRequest. You may access HttpRequest in the .upgrade handler and pass data along to WebSocket, via its UserData.
- Adds UpgradeSync and UpgradeAsync examples showing these features.