This class is responsible for discovering the data available in an implementation
of DataAttribute. The discovery process may not always have access
to reflection (i.e., running in Resharper), so the discoverer must make a best
effort to return data, but may return null when there is not enough information
available (for example, if reflection is required to answer the question).