This patch refactors the "Hair" data-block, which will soon be renamed to "Curves".
The larger change is switching from an array of `HairCurve` to find indices in the
points array to simply storing an array of offsets. Using a single integer instead of
two halves the amount of memory for that particular array. I've also found using
offsets directly works well in `CurveEval::control_point_offsets()` and
`CurveEval::evaluated_point_offsets()`.
Besides that, there are some other changes in this patch:
- Split the data-structure to a separate `CurveGeometry` DNA struct so it is usable for grease pencil too.
- Update naming to be more pleasant, and more aligned with newer code and the style guide.
- Simplify the RNA API for the data-block, aligning a bit better to the internal storage.
-- Radius is now retrieved as a regular attribute.
-- `HairPoint` has been replaced with a `positions` collection property.
-- `HairCurve` has been replaced with offsets, as mentioned above.
- Add comments to the struct in DNA.
The next steps are renaming `Hair` -> `Curves`, and adding support for other
curve types, Bezier, Poly, and NURBS.
Ref T95355