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).
This is perfectly functional workaround for the use case you're working to :+1:, but I hadn't appreciated just how hard/messy it would be to extend in the near future. I suggest we ditch the check and just accept that prior to 1.13.0 we aren't going to be restricted to the coded keys.

NB. This would also let you unify this loop with `_get_message_sections`.