Low-level FieldsFile variant access

**Work-in-progress**

This PR demonstrates a possible low-level API for reading UM FieldsFile variants - instantaneous dump, mean dump, "normal" FieldsFile, ancillary, etc.

~~The main open questions are around how to handle the DATA component and its relationship to the LOOKUP component.~~

UPDATED: Now has a `Field` based interface which combines the LOOKUP and DATA components. NB. Accessing the data uses a **method**, not an attribute: `Field.read_data()` (Feel free to debate the name :wink:)

Example usage:
```python
from iris.experimental.um import FieldsFileVariant

path = '/data/local/dataZoo/Fields/lsm/qrparm.mask'
ffv = FieldsFileVariant.from_filename(path)
print ffv
print 'Sub-model:', ffv.fixed_header.sub_model
print 'ints:', ffv.integer_constants
print 'reals:', ffv.real_constants
print 'len(fields):', len(ffv.fields)
print 'fields[0]:', ffv.fields[0]
print 'fields[0].lbrel:', ffv.fields[0].lbrel
print 'fields[0].lbuser4:', ffv.fields[0].lbuser4
print 'fields[0].bplat:', ffv.fields[0].bplat
print 'fields[0].data:', ffv.fields[0].read_data()
```
Resulting in:
```
<FieldsFileVariant: dataset_type=4>
Sub-model: 1
ints: [-32768 -32768      1 -32768 -32768    940   1016     38 -32768 -32768
 -32768 -32768 -32768 -32768      1]
reals: [ -1.07374182e+09  -1.07374182e+09  -1.07374182e+09  -1.07374182e+09
   3.75000000e+01   1.77500000e+02]
len(fields): 1
fields[0]: <iris.experimental.um.Field2 object at 0x7f1a9e5e5ad0>
fields[0].lbrel: 2
fields[0].lbuser4: 30
fields[0].bplat: 37.5
fields[0].data: [[0 0 0 ..., 1 1 1]
 [0 0 0 ..., 1 1 1]
 [0 0 0 ..., 1 1 1]
 ..., 
 [0 0 0 ..., 1 1 1]
 [0 0 0 ..., 1 1 1]
 [0 0 0 ..., 1 1 1]]
```
Did you mean `data_class`? If not, consider moving the if-else on dataset_type to inside the else on 398.