removing storage name from Metadata as first class citizen, replacing it with annotations (merged with emils changes)

Merged with Emil's changes and incorporated previous CR feedback

@anpete @emilcicos 
I am wondering whether it is better to return null if an annotation is not present. These methods may not have enough context to return a good name in case of complex mappings. Not sure what is best.