Fixed get_component method in Field to get working with subclassess of collections.Mapping

Method get_components checks if object is instance of dictionary, but it fails when custom dict-alike implementations (especially subclasses of collections.Mapping) are used.
This commit adds checking for presence of dictionary interface methods on obj in method get_components.
Given that this is just a test case, can we stub this out to just `__getitem__`?
And to also just do self._data = data, ignoring the `None` case?
Those codepaths won't ever be run, so be better to drop them.
Let's also include a docstring explaining the motivation of the class.