Functionally, this is totally the right direction.

However, I think we'll want to optimize.  My thought is to keep a static Map from Annotation type to a list of AnnotationValidators: the list can be empty for Annotations that have no validator.  This should keep the reflection cost as low as possible.  Thoughts?