Thread-safe ancestors/descendants
Declares the ancestors and descendants static functors thread-local. Due to the internal cache which remembers particles already passed to avoid duplicates, they cannot currently be used concurrently by multiple threads. As an alternative, the internal std::vector
could be declared as an instance and thread-local member to hide this complexity.