STYLE: Use static member variables for reference roles and attribute name

Issue #2727
BUG: Copy NodeReferenceMRMLAttributeNames in vtkMRMLNode::Copy()

Issue #2727
ENH: Add support for node reference templates

In vtkMRMLSelectionNode, the exact name of the reference roles of a unit is
not known until the unit is set and observed. (it's a dynamic number of
unit reference roles). By using a special key '/' in the reference role
(e.g. "unit/"), it is possible to have multiple reference roles
(e.g. "unit/length", "unit/time"...).
Issue #2727
BUG: Restore the selection node units on scene close

Re-enable Units module.
Closes #3176, #3152
ENH: Improve qMRMLUnitWidget interface

QFlags were added to this widget so one can choose what properties are
visible or not. This is what is done in the qSlicerUnitsSettingsPanel to
hide the advanced properties of the unit to the user. By default, the user
can only modify the precision property.
If he choose to show more properties, a warning stating that only display
values are changed when modifying an unit is shown along with the other
properties.

Style wise, the groupbox title now has its first letter in uppercase to
follow the GUI conventions and a horizontale line in the
qMRMLUnitNodeWidget between the precision and the rest of the properties.

See Issue #3137

From: Johan Andruejohl <johan.andruejohl@kitware.com>
BUG: Fix modules depending on units
ENH: Add vtkMRMLUnitNode::GetDisplayStringFromValue
BUG: Fix Volumes module decimals behavior

* make sure qMRMLVolumeInfoWidget gets setMRMLScene called before
the current volume node combobox. This is important because
qMRMLSliderWidget can change the number of decimals from the units node.
Such decimal number should be overwritten by the value of the spacing (or
origin).