Introduce some utility classes for dealing with framed protocols, and port the web sockets implementation over to them

The most user visible change is that now the underlying web socket implementation deals with
continuations automatically. Messages with multiple frames are now automatically merged into a single
channel.