Interface through which all classes responsible for decoding a particular type of metadata may be called.
Note that the data source is not specified on this interface. Instead it is suggested that implementations
take their data within a constructor. Constructors might be overloaded to allow for different sources, such as
files, streams and byte arrays. As such, instances of implementations of this interface would be single-use and
not threadsafe.