Major IPyWidgets Update

CoCalc's Jupyter notebooks now have the latest version of IPyWidgets, and vastly improved support for custom widgets! We spent much of July doing a complete rewrite of the IPyWidgets implementation in CoCalc's Jupyter notebook to fully support the latest version of widgets, and also support using arbitrary custom widgets. This is done and now live, and is a major improvement. All widget layouts should now be exactly the same as upstream, and custom widgets work as long as they are hosted on the jsdelivr CDN. Before this, almost no custom widgets were supported (basically, only K3d), and now almost all custom widgets work, including ipyvolume, ipympl, newest k3d, bqplot, and much more.

Widgets in CoCalc work almost the same as the latest official upstream version. The main difference is that widgets support realtime collaboration and the full state of widgets is stored on the backend server. This means that if multiple people use a notebook at once (or you open the same notebook in multiple browsers), then state of widgets are sync'd. Also you don't have to re-evaluate code for widgets to appear if you refresh your browser.

An open source library that came out of this project: https://github.com/sagemathinc/cocalc-widgets

Upstream IPyWidgets, now all examples are supported: https://ipywidgets.readthedocs.io/en/stable/

CoCalc Widget docs: https://doc.cocalc.com/jupyter-enhancements.html#widgets-in-cocalc