to_bytes() also supports bytearray and memoryview
Lazy uses cached_property to store object value
use iter() and type() for Lazy's __iter__() and __class__ implementations respectively
returned use of object's __class__ property in Lazy