GRIB support for saving time increment for time aggregated data (PDT4.8)

This PR enhances the existing code for saving data in PDT 4.8. As well as refactoring the code it adds support for parsing and saving the cell_methods on cubes to determine the interval (e.g hourly or daily) of the data that has been summed/averaged/...
I feel we should not be using these functions at all and should only use `grib_set` to set grib message key values. My reasons for this statement are:
 * The [GRIBAPI documentation](https://software.ecmwf.int/wiki/display/GRIB/Python+Package+gribapi) no longer documents the provision of anything other than `grib_get` and `grib_set` in the GRIBAPI for getting and setting the values of keys in a message (with the exception of getting and setting array keys, where `grib_get_array` and `grib_set_array` must be used).
 * This follows the approach used in the [new loader code](https://github.com/SciTools/iris/blob/master/lib/iris/fileformats/grib/_message.py#L354-L384), where we only use `grib_get` (with the above exception for getting arrays).