When a user includes a URL from an oEmbed-enabled provider, fetch that oEmbed data and render it in the post instead of the plain URL.
This enables easy embedding of all types of content (see subtasks for some).
- Check plain URLs against a list of providers.
- If the URL matches one, fetch that data (ideally asynchronously, before the user publishes - TODO: create task)
- Cache that data locally in a new oEmbed database table
- Retain a cached version for some small amount of time
On post rendering:
- Check plain URLs against a list of providers
- If the URL matches one, look it up in the oEmbed table
- Serve the content from the database
- If the cached data is expired, fetch it in the background (for the next visitor to see)