Part of #118145. Use the recently added utility for base mesh data, and for BMesh and multires add a compromise that gets some benefits of simpler loops but still avoids some duplication. Also add move a recently added utility to only affect visible grid vertices to the relevant header and reuse it. I expect this won't be a permanent part of the API but for now it's better than duplicating all the loops twice.