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.
According to the documentations, type use is a general term that include type parameter declarations and parameterized type:

http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html

Since this method works on formal parameters `Bar<T>` and type arguments `extends Bar<Integer>`, I thought I give it a general name.

However, since there is a lot of interchangeability between these terms, maybe we should have standard terms for the different locations where the type use annotation is used: formal parameters, actual type arguments, and parameterized types.