cache kernel_info reply for protocol adaptation

WebSocket connections will not open until kernel_info is retrieved, removing a race condition waiting for the reply to indicate adaptation, which could result in a v5 message being sent to a v4 kernel. The reply is cached, so that it need not be requested on each new connection.

closes #6740
Because `get` requests kernel info and waits for its reply, it can take an arbitrarily long time to finish. This makes it non-blocking while waiting for the reply.