HV-877 Supporting type use constraints on type arguments

This applies to `PropertyMetaData`. After your feedback, I'll continue the work on parameters and return values and I'll extend `ParameterMetaData` and `ReturnValueMetaData`.
> Should we really have this second constructor? I'd rather add the new argument to the existing one

Ok. I wanted a separate constructor for `AnnotationMetaDataProvider` where we don't have constrained type arguments. But if you prefer, I'll make one constructor and refactor any code that reference it.