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.
In the absence of a fancy Enum class I've gone with a simple private class using object id semantics. In other words, you have to do `FieldsFileVariant(path, FieldsFileVariant.CREATE_MODE)` and can't short-cut it with `FieldsFileVariant(path, 'w')` or `FieldsFileVariant(path, 'create')`.