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. Coincidentally, this can also solve geigerzaehler/beets-check#1 and (to some extend) #608.

*TODO*
- [x] Figure out how to expose the API to plugins.
- [x] Read custom tags into flexible fields