Model formatting: Refactor and fix precedence

1. Moves all formatting related code from the model into a separate class.
2. Item values take precedence over album values except for paths. Fixes #858.
This emits an empty string for missing fields, which makes sense. I'm not sure if it would ever be relevant, but one other strategy we could consider here would be to format `None` using the appropriate field's type—for example, numeric fields might emit `'0'` instead of the empty string for missing values.