Optimised queries for Page#nested_url and Page#path

This makes use of ancestors instead of iterating through all parents.
This means one database query, not several.

We still have too many queries but this should speed things up quite a lot - which should make @simi happier.

Potentially fixes #2087
In future, might be clearer to do this sort of refactor in two steps - it's hard to follow what's the query optimisation and what's just rearranging code.