Move iteration from dict into walk, add optional descend callback