Performance optimizations for best-first selector

Mostly revolving around finding single paths. This gives a good
improvement when calling PathFinder#findSinglePath for those graph
algorithms using the traversal framework and more specifically the
BestFirstSelector. Currently this will benefit Dijkstra and A*, although
the default implementation of A* is a custom non-traversal-framework
version that only supports single paths anyways so already has got a
similar performance behaviour. Look at TraversalAStar for a A* version
that uses the traversal framework.

Observed performance improvements of Dijkstra findSinglePath for graphs that saw performance problems previously is around two orders of magnitude, but depends on the graph layout.