[Sessions] Decouple interface from WS, align with HTTP

This is technically a BC break so it's going in 0.4.

Before `HttpServer` was separated out from `WsServer` we read the HTTP headers from each `$conn->WebSocket->request` variable and assumed `SessionProvider` would sit on top of `WsServer`. Now with a cleaner separation `SessionProvider` should sit on top of `HttpServer` and below `WsServer`, being injected with the HTTP headers rather than assuming them inside a passed object.