RecursiveSchemaWalker: prevent infinite loops -- hopefully

The algorithm is rather simple. There is a loop if a reference resolution leads
to the same schema, at a path which is either a parent or a child of where we
came from.

Test this (crudely) by loading the draft v4 core meta schema which is an ideal
test ground for us, since it has plenty of { "$ref": "#" }, which obviously
leads to such a situation.