[walker] Supply ancestors to visitor functions

Added a walking strategy that builds up an array of parent nodes, and passes that to the callbacks.

This is a more general approach to supplying the parent node (#88) and is a less noisy implementation.