Fix dog-piling of preview

If a preview takes longer than the timeout of the ZXTM or another component then
the frontend immediately requested it again eventually causing massive dog-piling
of previews in riff-raff.

We fix this by only processing each request once, handling the preview
calculations in the background, and using a unique ID to track each request for
a preview.