Add support for writing ModuloAlong* annotations

ModuloAlong* annotations are now written for each dimension that has a sub-dimension.  Right now, this is only demonstrated by FLIM readers (SDT, Imspector, ICS), but eventually it can be extended to readers that use other non-ZCT dimensions.

New API to deal with generic modulo support:

* ```loci.formats.Modulo```, which encompasses all of the information needed to create a ModuloAlong* annotation
* ```Modulo getModuloZ()``` in ```IFormatReader```
* ```Modulo getModuloC()``` in ```IFormatReader```
* ```Modulo getModuloT()``` in ```IFormatReader```
* ```addModuloAlong(OMEXMLMetadata, CoreMetadata, int)``` in ```OMEXMLService```

API deprecated as a result:

* ```getChannelDimLengths()``` in ```IFormatReader```
* ```getChannelDimTypes()``` in ```IFormatReader```
* ```cTypes``` in ```CoreMetadata```
* ```cLengths``` in ```CoreMetadata```

See https://trac.openmicroscopy.org.uk/ome/ticket/10882

SDT data is currently the best test of this functionality.  Opening pretty much any SDT dataset with ```showinf -omexml``` should show that ```SizeT``` (not ```SizeC```) has a sub-dimension, and that there is a ```ModuloAlongT``` annotation linked to the ```Image``` that has the correct ```Start```, ```Step```, ```End```, and ```Type``` values.

Parsing ModuloAlong* annotations from OME-XML/OME-TIFF files is not yet supported; once this PR is merged I will open a separate PR to do that.

/cc @imunro