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.
> So, if there is a field and a getter for are you saying you are adding the constraint to both? This way we would validate the constraint twice. I am really not sure about this anymore. It feels we are going far beyond what we want to achieve for now.

I was following the use cases from the email, but I guess you're right. I just tested it, and the constraint is applied twice.

So, what do you think? Go back to basics (collections constraints)? Or maybe change some of the use cases?