Adds an AdapterTracker class to keep 1-1 correspondance between objects and their adaptions. Now raise ImplementationError or AdaptionError instead of ValueError, KeyError or TypeError.
3.3.2
Fixes detection of descriptors defined on subclasses.
3.3.1
All public methods are now available via `PureInterfaceType` so that they can be used by interfaces for other purposes if needed.
3.3.0
Added `optional_adapt` method to `PureInterface` class.
3.2.0
Unified the handling of attributes and properties in interface definitions.