Basic addition and check of a Maya Scene Control

New method added to dataProcessor called isSceneControllerActive. This is
run whenever a new superNodeGroup is dragged in, or is a new Wiregroup is
created. If self.sceneControl is found and verified in the Maya scene then
no action is taken. If it is not found, or is None, then the user is asked
to put in a unique name to build a new one.

The sceneAppData is now passed down to the ServoDataConnector level, so
appropriate attributes can be createdon the sceneControl, and connected to
appropirate animation curves nodes that will be created in the Maya scene.

dataprocessor, or sceneControl is going to have to be passed down too.
Investigate this...
WireGroups and SuperNodes now add attributes to the sceneControl

Attributes are currently added with nice locked off boolean labels.
However, they are not checked or removed. to do this the dataProcessor is
passed down through all levels down to the servoDataChannel, but not when
the instance of each class is created, since that failed on a deepcopy.

As such a method in the dataclass has been created called manageAttribute
Connections. This initially collects all the dataBundles. Then ensures
that each one has a the correct dataProcessor passed to it, then loops
through the Attribute connectors adding attributes to the SceneControl
after initially creating a title for each DataBundle.
Basic clearing and regenerating of sceneControl Attributes

New methods called clearAttributeConnections has been added to the
dataProcessor. This loops through all userdefined attributes except for
"Happy Face" unlocks and removes them. It does not delete any associated
animation curves etc.

This is then called at start of manageAttributeConnections. So the
attributes are cleared out, and then regenerated as required.
ServoDataConnectors now manage animCurve Connections

ServoDataConnectors now have a method called manageServoCurveNode. This
checks initially creates a servoCurveNode if none exists. If one does
exist in the scene, then it strips it of connections and reattaches it to
the correct attribute.

Extra methods also added in Maya Data associated with listing, making and
breaking connections
ServoDataConnector animCurves now clean up on Deletion

When nodes are deleted, then now call a clearData method which calls the
same method in the dataBundle and all the way down to servoDataConnector,
cleaning up the data on the way. In the servoDataConnector it checks to
see if the animCurve exists using the deleteServoCurveMethod. If found the
curve Node is deleted from the maya scene.

Now node creation and deletion continually links up the correct attributes
and animCurves for the servoDataConnectors.

Still yet to check is adding and removing individual servo Connectors
Extra ServoDataConnectors can be added and removed with AnimCurves

The servoCurveNodes now fall in line and are deleted, created and renamed
appropriately when extra servoDataConnectors are added and removed from
attribute Connectors.

This is done by addapting the attributeServoConnector
removeServoDataConnector method to delete the associated servoCurveNode.

The sortServoDataConnectors is also expanded to temporarily rename
servoCurveNodes, so there is no clash in Maya names. Then sort the new
indexes and names, then rename the servoCurveNodes to fall back in line.
CreateServoCurveNode method no sets up initial keys and tangents

Basic methods added to MayaData to allow the manipulation of a graph on a
animCurve Node. Values are now initialised between 0, and 180. This might
be worth adjusting somewhere.

User should select the appropriate curve and tweak the output relationship
where needed.
AttributeConnectors now link out to AnimCurves too

Methods implemented around a new controllerAttrCurveNode, which has
associated Name attribute, and is implemented in exactly the same way as
the ServoCurveNodes.

Clean up of the new animNodes occurs in the clearData method, using the
same deleteControllerAttrCurveNode idea.
SceneLinkServoTabW is now updated and simplified around AnimCurves

The table now simple displays the Attribute and Servo Channel link
information, and all the scaling of values etc is run through the
associated AnimCurves, that can now be selected with a RC.

This means lots of the of method of evaluating data has been thrown away,
since, the values are now remapped through the anim curves.

Now need to reimplement the setValue and getValue stuff in the Attribute
Connector to feed data in and out of the AnimCurves...
SceneLinkServoTabW RC menus updated and aligned with new columns

All contextmenu methods have been updated so that all the
servoDataConnectors are gathered. This list is used to determine which
servoDataConnector has been hit. From there there the appropriate
AttributeConnector is found and acted upon. Table then repopulates to
update all information.
AttributeConnector setValue updated to read AnimCurve

The setValue method in the AttributeConnector is now updated so the
incoming value is scaled between -10 and 10, and then fed out to the
animCurve to get the final return value, allowing complex relationships
through the curve...

Range increased from -1 to 1, to -10 to 10, because it makes it easier to
insert extra keys in the graph for more control.

Now we need to reimplement setValue for AttributeServoConnectors, so that
the servo data is processed and reported back too.
AttributeServoConnector has new setValue method for servos

Reimplemented method that simply calls the servoDataConnector.setServo for
each servoDataConnector. The sceneControl attribute has already been set,
so it is just a case of getting the output from the associated
servoCurveNodes. Simples..

Next stage is to actually implement the servo moving code. From there
everything has to be wrapped up with proper, read and store methods.
Moving Servo Code implemented through MaestroServo module

Separate module defined with a class called MaestronSerialServo. This can
be swapped out if there is any other servo control mechanism in the
future. This class is fed into the creation of the DataProcessor.

It cannot be included in the DataBundle, since the dataBundle is being
deep copied, which messes up the serial connection, throwing an error.

As such the servoAppData is passed down from DataProcessor, to
DataServoBundle, to AttributeServoConnector to ServoDataConnector using
the setServoAppData method, in exactly the same way as the
setDataProcessor method was implemented. The setServoAppData method is
called as soon as a new bundle is made. Appropriate calls for additional
ServoDataConnectors are also made.

Everything works!

Now implement storage of the DataProcessor and tidy up saving on the
attributes that are now needed.
Merge branch 'sceneControlBranch'