ENH: Add qMRMLLayoutViewFactory

This gives the ability to instantiate a different QWidget for any view
(e.g. 3D, slice, chart). Limited support is given to handle a new type
view (subclass of vtkMRMLAbstractViewNode). For full support, the layout
logic would need a similar plugin mechanism.

/// MRML layout manager that instantiates the QT widgets and layouts from the
/// layout node and the view nodes in the scene.
/// The management (creation, configuration and deletion) of the view widgets
/// are delegated to qMRMLLayoutViewFactory.
/// Example to change a default factory:
/// \code
/// qMRMLLayoutSliceViewFactory* mrmlSliceViewFactory =
///   qobject_cast<qMRMLLayoutSliceViewFactory*>(
///     app->layoutManager()->mrmlViewFactory("vtkMRMLSliceNode"));
/// MySliceViewFactory* mySliceViewFactory =
///   new MySliceViewFactory(app->layoutManager());
/// mySliceViewFactory->setSliceLogics(mrmlSliceViewFactory->sliceLogics());
///
/// app->layoutManager()->unregisterViewFactory(mrmlSliceViewFactory);
/// app->layoutManager()->registerViewFactory(mySliceViewFactory);
/// \endcode
/// You can also register ctkLayoutViewFactories that are not related to MRML
/// view nodes.
BUG: Do not fire incorrect events when closing scene

* onNodeIDChanged() was using a never set "Quantity" property.
* The unitComboBox is not exposed to the user,
so the current node id can only be changed by the selection node.
Such workflow is already handled and does not need extra signal/slot connection.

It had the side effect of resetting the number of decimals to the slider
widget of the slice views when closing the scene. That would send (queued)
signals to set the slice offset to be 0.0 AFTER (because queued connection)
the new slice offset was initialized when loading a new scene.