Class to keep track of instance pointer/schema pairs during validation
This class helps to detect scenarios where a same schema is visited more than once for a same instance pointer. For instance, any instance validated against this schema:
{ "oneOf": [ {}, { "$ref": "#" } ] }
will trigger a validation loop.
Simply keeping track of instance pointer/schema pairs alone is not enough; it is sometimes perfectly legal to revisit a same pair during validation (for instance, alternative definitions of a container referring to one common schema for the same child). For this reason we use a stack, to which we {@link #push(FullData) push} pointer/schema pairs which are then{@link #pop() pop}ped when validation is complete.