updates per review

- two-part protocol version (5.0)
- default value for cursor_pos is end of code
- docs, comment, and docstring touchups
add version key to js message headers
add shim for double-serialized JSON

msgspec gives unserialized JSON,
nbformat v3 wants JSON strings.