Making the EntityType API more consitent

 1. Adding missing methods
 2. Using the same parameters for all methods operating on a specific metadata type.
 3. Adding missing NotNull annotations
 4. Ensuring the uniqueness of the metadata items
 5. Providing more helpfull exceptions
 6. Treating the primary key as a key in TryGetKey and related methods
I prefer Any. Is it not optimized for IReadOnlyList like it is for IList? I would like to see some quick perf numbers and/or get David's opinion on it.