Part of #116901. Main benefits to this change are reduced function call overhead and a simpler hot loop when face corner normals are extracted. Code duplication is also reduced through use of templates. The downside is that the access patterns aren't clearly better for the BMesh case where a lot of data is stored array-of-structs style.