reworked `cached_property`: use dedicated dict to store cache instead of owner's __dict__
added __slots__ to Lazy class