Add lightweight grib message wrapper

Provides a lightweight wrapper to a GRIB message. This, along with #1300, provide some early elements in the process of improving Iris' GRIB loading capacity.

Note that this new GRIB loader loads only the **coded** keys from a GRIB message, not any of the computed keys. However the gribapi function, `gribapi.grib_skip_computed()`, which should return only the coded keys from the message, has a bug in gribapi < 1.13 so to prove the concept of this GRIB wrapper it has been designed to work with a single message from a specific GRIB file. However once the the new version of gribapi is available the code below should function as expected (i.e. returning only the coded keys from the message).
Arguably, it'd be nice to avoid using this function. In other words, just use `gribapi` directly:
```python
def setUp(self):
    filename = ...
    with open(filename, 'rb') as grib_fh:
        grib_id = gribapi.grib_new_from_file(grib_fh)
        self.message = GribMessage(grib_id)
```