A mistake in the mesh normal refactor caused the wrong mesh to
be used when calculating normals with a shape key's deformation.
This commit fixes the normal calculation by making a few changes
in the area.
- The function doesn't make a local copy of the mesh anymore.
- Instead of using the mesh normal API, calculate the normals directly.
- Split the function into three, one for each mesh element.
This required changing a function to apply shape keys to take mesh
vertices instead of the whole mesh. The downside is the lower-level
access to mesh normals, the upside is that they don't have to be copied,
and no temporary mesh is created.