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.
Not super-keen on this. Can we use `isinstance(obj, (dict, Mapping))` instead? Any other cleaner options?