Product definition template 1.

This PR extends the new GRIB2 capability to include product definition template 1.

I'm conscious that I've created utility functions:
 * `reference_time_coord`
 * `forecast_period_coord`
 * `validity_time_coord`

which could/may be more generic to accommodate future functionality. But since I don't have a use-case or pattern for *how* to make them generic, I'm leaving them as is and assuming that follow-on PRs will tend towards the *agreed* solution (@pp-mo)
As it is, this doesn't ensure that we get one of each type, only that each is of *some* expected form.
I'd suggest instead :
```
warn_messages = [arg[1][0] for arg in warnings.warn.mock_calls]
expected_terms = ['type of generating', 'background generating', 'forecast generating']
for expect in expected_terms:
    matches = [msg for msg in warn_messages if expect in msg]
    self.assertTrue(len(matches) == 1)
    warn_messages.remove(matches[0])
```
This way also doesn't need a "len(warnings.warn.mock_calls) ==  3" check.