HV-877 Supporting type arguments annotations constraints

This is a bit messy, but it’s just to show the direction and to get your feedback.

Nested unwrapping is also supported. The following shows what I have tested:

    List<@NotBlank String>

    @UnwrapValidatedValue
    Optional<@NotBlank String>

    @UnwrapValidatedValue
    Optional<@UnwrapValidatedValue @NotBlank StringProperty>

    Map<String, @NotBlank String>
So my thinking is the following: Until now, all constraint meta-data was determined in a "static" way for a given type, i.e. we could read it once and re-use it without any changes from there on. As an example, consider the following type:

    Tuple<V1, V2, V3> {
         @NotNull
         V1 v1;

         @NotNull
         V2 v2;

         @NotNull
         V3 v3;
    }

Whereever this type it's used, it's constraint meta-data is the same. E.g. when validating property "v2", we'd have to validate its `@NotNull` constraint. Now, with type constraints, the constraint meta-data is in addition made up by these constraints on the type but in addition also by the constraint's given on a type's _use_. So say there is a field of type `Tuple`:

    @Valid
    private Tuple<String, @Past Date, Integer> tuple;

Now when validating the member "v2" for this particular type use (via cascaded validation), not only the `@NotNull` constraint declared on the property itself has to be validated but also the `@Past` constraint as it is applied to the same type parameter V2.

So I think we need to find a way to model this _type use context_, pass this to `getMetaDataFor()` so that the returned `PropertyMetaData` provides a unified way to the constraints declared on the type and the type use. Of course it still would be nice to cache the effectively applying meta-data per type use in some way.

Does this make sense?