Fixing previous change on the firstReader() implementation.

Some of the functions in the class (hash functions and geometry compute) were using data that was not coming from the firstReader, leading to crashes.

In order to solve the problem and prevent future ones, I've isolated all the member functions that should be shared into a private class that only the firstReader allocates.
Also, all the member functions that are supposed to be used only by the firstReader have an assert() statement to document it.
Lastly, during this process I've realized that some of the data variables that are linked to the knobs were being overwritten during the knob_changed() function, which would create disparity to the non-firstReader instances. So I've created additional ones in the shared data.
Several fixes and some reengineering.

- Realized that Nuke calls knob_changed() and then, Op::append() and the shared Data values were being used causing inconsistent Hash computation. Now the append() function uses refreshed information based on knob values.
- Prevent doing any computation on the knob_changed while the script is being loaded, and forces it at the end with the call to validate().
- Realized that the existence of a "root" knob prevents the file knob to have a TCL expressions such as [file dirname [value root.name] ]. So, renamed the knob to "sceneRoot". This causes warnings while loading previous Nuke scripts, but all the other knobs are loaded fine. The default value "/" is the only one used at IE and this change should not break scripts.
- The changes in file and root attempt to keep selection by using the method loadAllFromKnobs().
- The knob_changed callback is not necessarily called by Nuke. There's some caching mechanism that prevents that from happening. the Op::append() on the other hand is reliable, so we stopped baking the selection list during knob_change and force it's recomputation in append().
- Eliminated some redundant hash values ( sceneHash and scene file for example).
- Optimized loadAllFromKnobs() in preventing two calls to filterScene.
- Using DD::Image::root_real_fps() instead of the hard coded 24fps in the computation of time.
- Using error(msg) function in getSceneInterface to show in the Viewer when geo cannot be loaded (either the file does not exist of the root is invalid).
Adding a unit test module for SceneCacheReader.
Merge pull request #261 from ldmoser/nukeSceneReaderFix2

Fixing and revamping SceneCacheReader for Nuke
Update Changes
Update SConstruct
Improved precision of Imath Vec and Color repr() and str().

This works because boost::lexical_cast contains magic to figure out an appropriate precision for each numeric type. There is a slight speed hit (~10%) for using this call, but these methods shouldn't be performance critical.
Merge pull request #262 from johnhaddon/repr

Improved precision of Imath Vec and Color repr() and str().