Move tracing into `validator`.

I've added a tracer element to the `validator` function that allows me
to optionally specify a trace name and report function which causes the
validator
to first call the tracer to give a test a chance to monkey with the
goings on.

I've decided to put this in, then look for new says to deal with what
bothers me about this; that every callback invocation is going to
perform this `null` check, which is probably nothing I really ought to
worry about. It probably really isn't the hot code that I think it is.
Just because I use `validator` frequently, it doesn't mean that is where
the program is going to spend most of its time.

Yet, I imagine that there is an outer function builder, one that can
wrap the validator. Express it as a wrapper, then experiment with the
wrapper.