This diff consists of two commits:
Separated "writing Alembic mesh" from "writing mesh object"
I moved most of the AbcMeshWriter code to a new class AbcGenericMeshWriter. The latter is an abstract class and does not make any assumptions about the type of Blender object being written. This makes it possible to write metaballs, curves, nurbs surfaces, etc. as mesh to Alembic files.
The AbcMeshWriter class now is the concrete implementation of AbcGenericMeshWriter for Blender meshes.
write curve/NURBS as mesh
It's now possible to export curves and NURBS as mesh data to Alembic. This allows artists to do any crazy thing on curves and export the visible result to Alembic for interoperability with other software (or caching for later use, etc.). It's an often-requested feature.
This works around T60503 and the fixes export part of T51311.
Note that exporting zero-width curves is currently not supported, as exporting a faceless mesh (e.g. just edges and vertices) is not supported by the mesh writer at all.
To test, create a curve with thickness (for example extruded), export to Alembic and check the 'Curves to Mesh' checkbox in the export options.