Add a utf8Label method to the Unit class.

This allows the unit to return a wide string containing unicode character
encodings, giving more flexibility in how units are presented.
Refs #9252
Export Unit::utf8Label to Python.

It returns a standard Python unicode string.
Refs #9252
Add methods to create X/Y axis labels to WorkspaceData classes

All of the data should have meaningful units so it makes sense to
tie them together.
Refs #9252
Use new utf8Label methods for X axis of 1D MatrixWorkspace graphs

Refs #9252
Add UnitLabel base class.

It will be used to store label information for units.
Refs #9252
Tidy up of Unit.h to remove unirequired headers

Refs #9252
Add some basic UnitLabel concrete types.

Refs #9252
Implement & test copy constructor/assignment operator.

Refs #9252
Add UnitLabel classes for each defined unique Unit class label.

Refs #9252
Simplify UnitLabel class by just storing attributes.

It makes it easier to use.
Refs #9252
Simplify how unit labels are used/stored in the Unit classes.

Refs #9252
Add a PlotAxis class.

It will handle creating axis titles for a given workspace. This keeps
information in a single place.
Refs #9252
Harmonise code for X axis title creation.

Refs #9252
Harmonise code to create a title for "Y" values in a workspace.

Refs #9252
Use PlotAxis class for spectrogram plots.

Refs #9252
Add str & unicode conversion methods to UnitLabel in Python.

Refs #9252
Add UnitLabel inequality operators plus tests

Refs #9252
Allow PlotAxis to use IMDDimension objects alone.

Also put the "Spectrum" label as a Label unit in SpectraAxis
Refs #9252
Harmonize creation of plot axis titles for MD & nonMD sources.

Refs #9252
Put back methods to return plain strings for unit labels in Python

The main Unit::label is deprecated and issues a warnings but scripts
won't break
Refs #9252