Implement full-text searching

Index document content as well as the document metadata, allowing for documents and files to be found by their content. Matches on content should be weighted lower than matches on metadata.

This should be accompanied by performance tests as well.
Ah right, stored in html files on disk.

I'm pretty sure you'll want to unlink the downloaded file. This is the first place the `ctx` is being sent into the storage backend as `null`. Either we'll need a context from somewhere, but until we create a context-creating middleware for MQ tasks, you won't have one. Also, I think down the road we might want to get rid of having tenant-configurable storage backends.

For now, we could change the `getStorageBackend` and subsequent `get`/`remove`/etc.. methods such that a tenantAlias is taken in instead.