More powerful canvases_with which can see deeper into objects

This is needed for some of the other improvements I'm bringing
in forthcoming PRs.