ENH: provide direct access to tensor arrays from python

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22071 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Ensure backward compatibility in qMRMLNodeComboBox

Here is a quick summary of what happened:

What changed in r22052:
 Rename the Q_Property from currentNodeId to currentNodeID
 Rename QString currentNodeId() to QString currentNodeID()
 Rename setCurrentNode(const QString nodeID)
  to setCurrentNodeID(const QString nodeID)

What changed in r22059:
 Add QString currentNodeId() as a deprecated function
  (not invokable though)

What is broken after r22052 and r22059 ?:
 In C++, the function setCurrentNode(const QString nodeID) is missing.
 In Python:
  The function currentNodeId() is missing (not wrapped due to a missing
   Q_INVOKABLE).
  Trickier, any code using the property currentNodeId = ... will break too.

What this commit intend to fix:
  Add Q_INVOKABLE to currentNodeId() method for python wrapping.
  Return the old property as deprecated.

Also adding warning in the deprecated function to warn other developers.

See Issue #1694

git-svn-id: http://svn.slicer.org/Slicer4/trunk@22072 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Improve qMRMLUnitWidget interface

First thing, qMRMLUnitWidget is renamed to qMRMLUnitNodeWidget as it is an
interface with the unit nodes only. This will prevent confusion.
Consequently, the internal qMRMLUnitNodeWidget in the
qMRMLSettingsUnitWidget was renamed to unitNodeWidget.

QFlags were also 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
ENH: Separate SingletonTag and Name in unit nodes

The user may want to change the name of the unit node without necessary
changing its ID. So we need to separate these.
Consequently adding a name line edit in the qMRMLUnitNodeWidget so user can
modify the node's name.
The node name property is logged in the settings just like all its others
properties.

See Issue #1694
ENH: Add GetUnitNode() method in Selection node for faster lookup

Instead of getting the ID from the selection node, one can directly
get the node from it. This prevents the user from having to search the node
by ID in the scene since a reference to the node is already stored.

It was consequently modified where GetUnitNodeID() was used since in these
cases, the lookup was done after to get the node.

See Issue #1694