As for `Coord._as_defn()`, it's currently used:
 - to simplify the check for "semantic equality"(*),
 - to simplify the comparison of metadata in the `==` operator,
 - to determine compatibility within the merge process.

(*) Do the coordinates measure the same phenomenon. E.g. `iris.analysis.interpolate.regrid()`, `iris.analysis.coord_comparison()`, `Coord.intersect`.

So the same reasoning for including `var_name` can apply here too. But we should update the "semantic equality" cases to avoid using `_as_defn()` - perhaps something like `Coord.is_compatible(other_coord)`?