optimise is_navigable and get_navigable_children
properly optimise the navigation menu with some single-query list traversal trickery