Add new Custom dimension capability to pair with custom units.
When creating a custom unit, one can specify the associated dimension.
If the dimension does not exist, a new dimension is created, otherwise, the coherency of the unit is checked against the dimension.
Major refactoring of units and dimensions management.