Rich/RichKernel - Make thread safe and split up
This MR does a number of things
-
Updates a few classes in RichKernel to not do things that would not work in a parallel framework. For instance const methods that update mutable cache data members on-demand. Instead, just cache the values up front in the constructors etc. In practise the lazy evaluation was not saving much, if anything, as it was rare the cache was not required.
-
Split up RichKernel into three separate packages, RichKernel, RichUtils and RichInterfaces. The reason for this was to better support upgrade developments. Some components in the old RichKernel, small utility classes etc., should work fine with the upgrade so these I have moved to RichUtils, and this will be shared between the old and new frameworks. RichInterfaces contain tool interfaces. I am not yet sure how the upgrade will use these, but likely the upgrade framework is going to make less use of tools. RichKernel remains with only various tool and algorithm base classes, and the tool registry, which I know will change a lot for the upgrade (the tool registry is going, for example).
This MR will require a number of others in downstream projects, to adapt. These are ready and will be submitted shortly.