HV-877 Discovering and registering type use constraints

A bit smaller. This PR focuses on discovering and registering type use constraints for the base use cases. 

Cascaded type usage, and the actual validation of the constraints will be in separate PRs to make things easier to track.

Note: you'll need Java 8u20 for this to work. There is a bug with parameters annotated types with earlier JDKs.
We must use a map implementation here which is safe for concurrent access from several threads, `HashMap` isn't. 

I'm dubious about this map anyways, though. Won't this contain the variables from all the types processed and thus mix those up randomly (there is basically one shared instance of `AnnotationMetaDataProvider` per validator factory). If you want to collect the type variables of one given type, you need to pass it on the stack through method parameters.