add support for WebSock subprotocols

...so that the client can specify the message serialization
and deserialization format.
use macro instead of header name string

do not repetitively use the header name string
fix type specifications to be more abstract
improve message codecs support; add msgpack codec
README update