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.
Break getPreview apart for clarity (suggestion from @rrees)
Merge pull request #97 from guardian/sh-fix-preview-dog-piling

Fix dog-piling of preview