Low-level write access to UM FieldsFile variants.

This PR intends to be a reasonable first stab at providing the ability to modify/create UM FieldsFile variants.

As a low-level API it does not guarantee that modified/created files are strictly compliant with the official format documentation. However, it does perform a bare minimum of consistency checks/updates for metadata elements which dictate the locations of the various sections within the file, and which would be tedious and error prone to perform "by hand". The elements affected are the start and dimension length elements within the fixed length header, and the LBEGIN and LBNREC elements within the LOOKUP entries.

NB.
 1. No support is provided for packing data. Unless the "N1" digit of `field.lbpack` is zero the file will not be valid.
 2. This PR requires SciTools/iris-test-data#32 to be merged for the tests to pass to without "naughty" modifications to .travis.yml.

 - [ ] Update .travis.yml once test data has been merged.
Might be nice to tie up the mode and mapping in a  class e.g.:
```python
from enum import Enum
class FieldMode(Enum):
     read = 'r'
     create = 'w'
     modify = 'a'
     @property
     def source_mode(self):
         mapping = {FieldMode.read: 'rb', FieldMode.modify: 'r+b', FieldMode.create: 'wb'}
         return mapping[self]
```