Add caching to useBlobDisplayURL hook
QueryBlob manages giving us the same blob object, however the previous blob displaying hook allocated a new URI per invocation. This change makes the hook cache all blob URLs, and eventually deallocates with reference counting.