simplify: Implement initial attribute-aware collapse support
simplify: Implement initial attribute-aware collapse support

We now use vertex kinds to guide collapses, specifically:

- collapses are restricted based on vertex kinds: manifold vertices are
collapsed onto non-locked vertices, border & seam vertices are collapsed
onto each other
- edges between two vertices of different kinds are treated as
unidirectional
- when collapsing a seam vertex, we make sure that the corresponding
vertex from the other seam is collapsed as well

There are still a lot of problems we'd need to solve. A lot of vertices
are currently classified as locked - especially for faceted meshes -
which significantly hurts the collapse order, and makes us pick really
bad collapses at some point. Also, there's a set of robustness issues
that need to be addressed.

zeux/meshoptimizer,zeux/meshoptimizer,zeux/meshoptimizer