Add caching to CircleGraphicsItem's shape()