ancestors/ordered: parameterise iterator impl + add criss-cross case
This allows alternative implementations of ordered ancestor iterators to be tested against the same test suite.
Also adds an interesting case which caused troubles with early re-implemention of the ordered ancestor iterator without soft leaps.