anchor.diff:  
           | "shutdown_request"     -> ShutdownRequest (JsonConvert.DeserializeObject<ShutdownRequest>(messageJson))
           | "shutdown_reply"       -> ShutdownReply (JsonConvert.DeserializeObject<ShutdownReply>(messageJson))
  +
  +        //Jupyter 4.x support, do we need to do anything with this?
  +        | "comm_open"            -> CommOpen (JsonConvert.DeserializeObject<CommOpen>(messageJson))
  +
           | _                      -> failwith ("Unsupported messageType: " + messageType)
positive.code:         hb_port: int;      // # The port the heartbeat socket is listening on.
      }
  
  type KernelRequest = obj
  
  type KernelReply =
  
negative.code:     // connect
      | ConnectRequest of ConnectRequest
      | ConnectReply of ConnectReply
  
      // comm open?
      | CommOpen of CommOpen
  
      // kernel info
      | KernelRequest of KernelRequest
  