As reported in T89828, using tangent mode on a curve may result in unexpected twists and produce asymmetric geometry
for a symmetric curve.
The twists were mainly due to the use of the tangents instead of the normals when trying to correct the twist angles larger than 90 deg (bevel_list_flip_tangents).
The asymmetry is due to the use of a forward method for the computation of the 'tangent' (in forward_diff_bezier_cotangent). This patch computes the tangents using central differences, thus producing the expected symmetric output.
This also includes some mitigation of the issues arising from colinear segments, as illustrated below:
Before:
After:
I will include some more screenshots in T89828.



