Refactoring: the ChNodeBase and ChNodeXYZ classes, previously in the same file of ChIndexedNodes, have been moved to separate files, to improve readability.
The previous bool() operator for ChSharedPtr and ChSmartPtr were potentially dangerous because the compiler could implicitly cast bool to integer etc.
To avoid this potential risk of misunderstanding, now I implemented it by using the 'safe bool idiom', as used in boost shared pointers, so the bool implicit cast can be used only for  tests like
  if (mysharedptr) ...
Note that this is also possible with more typing..
  if (!mysharedptr.IsNull())
Note also that, when we'll migrate to C++11 / C++0x , there will be no need of this odd 'safe bool idiom', because we could use the 'explicit' in
  explicit operator bool() ..
Better inheritance scheme
The problem with GCC and reference & to ChSharedPtr<> should be fixed now. Simply, shared ptrs are passed by value only. The overhead should be minimal, anyway.
To be tested on Linux.