src, pkg: Change 'reason' code to 'problem' in protocol

This is for clarity. This code is unlike an HTTP status reason
because the 'reason' code is not present when there's no problem.
Presence of the code indicates a problem.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
pkg, src: Only forward specific control messages

In general the default is now that all control messages are single
hop and not forwardable. Only "open" and "close" messages are
forwarded.

Also change the cockpit.filter() callback interaction to better
handle this case.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
ws: Use "init" message to indicate lack of authentication

This fits with the general model of things better. The "init" message
must come first, and if it indicates an error, then there's no going
anywhere.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
base: Control "close" messages are never broadcast

This wasn't implemented nearly anywhere and just made things more
complicated than they need to be. Now "close" messages always have
a channel.

Closes #1492
Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>