As part of sat-mtl/google-summer-of-code#30 (closed), this MR merges the upstream hubs-cloud
branch into the metalab
custom client branch.
Cherry picking @ioioioio's WebSocket controller commits (1 and 2) did not end up being necessary because they were left unchanged during the merge with upstream.
Pinging @ChristianFrisson