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.
Abstract base class Mapping forces to define all these methods - __getitem__, __len__, __iter__.
Yes, we can ignore None case, i'll update pr shortly.