Exec websocket

Here's some commits that use websockets to do the shell instead of direct sockets. I've left the 'shell' command for now since it still does bash a bit better than exec. When I fix those, I'll delete the shell command.

Right now there is no muxing of stdout/stderr (I didn't see how to get it out of the pty library, although I didn't look very hard). I'll look into that as well.
Return probably should be: websocket stream or standard error

Where the latter would happen if the secret is invalid.

Operation is "sync" since this is a long lasting action that will not ever yield another backgrounded operation.