Make MediaFile extendable

This will allow plugins to write and read custom tags and synchronize them with the database as requested in #572 and #637. 

*TODO*
- [ ] Figure out how to expose the API to plugins.
- [ ] Read custom tags into flexible fields