This PR includes several optimisations. Chief among them are:
Implement _calc_abc_any for cases where a depending method only needs the label hash keys or element lists
calc_abc grabs and modifies results from calc_abc2 or calc_abc3 if already run, thus saving some processing
calc_abc2 or calc_abc3 are always run before calc_abc
add a hierarchical _calc_abc variant for cases such as cluster node calcs where the label hashes can be generated from the child node results instead of processing the full list of terminals
some other general index optimisations such as result sharing when nbr set 2 is empty
This PR includes several optimisations. Chief among them are: