Add GRIB save GDT12 (Transverse Mercator) 

This adds functionality to Iris that allows cubes on a Transverse Mercator grid to be saved to a GRIB2 message. This functionality is contained in a new `_save_rules` function called `grid_definition_template_12`.

**Please note** however that this _does not currently work_ due to a bug in GRIBAPI that means the only key in GDT12 that is specified as being a `float32` by the GRIB spec is set as a signed int by the GRIBAPI template. On account of this, `_save_rules` raises a `TranslationError` when trying to save a cube with a Transverse Mercator grid to GRIB.

The other changes I've made to get this "working" are:
 * This would appear to be the first grid we've saved to GRIB that is not on a simple lat/lon grid. As such I've improved the section of `fileformats/grib/__init__` that locates the horizontal dim coords of the cubes to find _any_ horizontal dim coords rather than only `Latitude` and `Longitude`.
 * The logic for locating the `ellipsoid` that defines the shape of the earth for the saved GRIB message has been improved. This was done because the previous logic did not cater for a non-Rotated Pole coord system with an ellipsoid defined.
 * I've also removed two function calls from `latlon_common` as it turned out they weren't common to GDT12. Specifically, GDT12 does not define lat/lon for first and last grid points or dx/dy.
 * As this PR introduces using only `gribapi.grib_set` for writing GRIB message key values, I've added a trap for calling this function to the grib save rules tests `__init__`. The test module itself for this change is very short as calling `grid_definition_template_12` will currently always result in a `TranslationError`.
As your resident Documentation Guy, I disagree - I deliberately left it as sparse as this because the style we're following is "Template m.n is used to represent a <lifted from the grib spec>" and I think we should follow this here too. The fact that the grib spec definition for GDT3.12 is terse is not our fault!