Issue127: Introduce MetadataExtractor

Extracts metadata according to a json configuration from a componentTree
IMHO stuff like this gets easier if you mark members / functions that you want to be private. Executing ```extractor.metadataExtractor_ = undefined``` should give you a headache ;)