Backport functools cached_property
