This adds baking support to simulation nodes. The following features are supported: * Bake simulation nodes of selected objects from the new "Baking" panel in the object properties. * Free baked/cached simulation data. * The bake is stored on disk in a folder next to the .blend file (so it's necessary to save before baking works). * Baked data is detected automatically when reloading the file. * The data stored on disk is partially deduplicated. Only duplicates that can be detected using implicit-sharing are taken into account. * The baked data can contain meshes, curves, pointclouds and instances. * The simulation state is written using a combination raw binary files for the data arrays and `.json` for meta data. Other formats besides `.json` could be used (most code is agnostic to that), but json is the easiest to use right now and seems to be good enough the common use cases (note that the size of the `.json` files do not depend on how large e.g. the baked mesh is). * During baking, there is a progress bar and it can be interrupted using escape. Limitations: * Volumes are not written to disk yet. * Currently it always bakes the entire scene frame range. * Baking subframes is supported internally, but is not exposed in the UI. * Currently, all attributes are written, but that is likely not necessary in most cases (e.g. selection attributes are written as well). Pull Request: blender/blender#106937