Noise models and estimation methods

This is a proposition built with @nicholst to represent the noise models (following suggestion in #170).

We propose to characterise the noise variance (diagonal elements) and the noise dependance (off-diagonal elements):

**Noise Variance**
- is 
  - homogeneous if all variances are identical (`nidm:noiseVarianceHomogeneous = true`) or;
  - heterogeneous otherwise (`nidm:noiseVarianceHomogeneous = false`). 
  - Heterogeneous variance can be further specified (e.g. by group, by time, FSL FLAME, arbitrary...) using a separate attribute 
- is defined spatially to be either:
  - local (`nidm:varianceSpatialModel = nidm:SpatiallyLocal`) or;
  - regularised (`nidm:varianceSpatialModel = nidm:SpatiallyRegularised`) or;
  - global (`nidm:varianceSpatialModel = nidm:SpatiallyGlobal`).

**Noise Dependence**
- is either
  - Independent (`nidm:noiseDependence = nidm:IndependentNoise`)
  - Compound Symmetry (`nidm:noiseDependence = nidm:CompoundSymmetry`)
  - Serially Correlated (`nidm:noiseDependence = nidm:SeriallyCorrelatedNoise`)
    - SeriallyCorrelated noise can be ApproxAR1, ARMA11, TaperedACF
  - Arbitrarily Correlated (`nidm:noiseDependence = nidm:AbitrarilyCorrelatedNoise`)
- is defined spatially to be either:
  - local (`nidm:DependenceSpatialModel = nidm:SpatiallyLocal`) or;
  - regularised (`nidm:DependenceSpatialModel = nidm:SpatiallyRegularised`) or;
  - global (`nidm:DependenceSpatialModel = nidm:SpatiallyGlobal`).