Updated Valid constraint reference

| Q              | A
| ------------- | ---
| Doc fix?      | yes
| New docs?     | no
| Applies to    | 2.3
| Fixed tickets | 

Revised PR #4351 for 2.3 branch
Hi guys!

I've merged this in because it has some nice fixes and is at least 90% of the way there. So, let's talk about the wording here.

As I understand it (just from reading what we have here), these 2 options (`traverse` and `deep`) apply *only* if this is applied to a collection of objects. Is that correct?

Now, even though I can see the wording difference between `traverse` and `deep`, I don't really understand yet what the difference is. Does `traverse` mean "validate the objects" and `deep` means "validate the objects AND validate any objects embedded in those objects"?. Or does it mean something else? Does it make sense to set both `traverse` and `deep` to true at the same time, or is this redundant?

As you can see, I don't know yet exactly how this feature works. What I think we should do is include these in the main "Basic Usage" section so people can really see how they work and how they work together. This may mean we have a new sub-section called something like "Validating a collection of items".

What do you guys think?