Use GIO when reading and writing FLAC tags

Use the level 2 FLAC metadata interface to read and write FLAC tags,
using GIO for the IO callbacks.
Split off shared FLAC code to a separate file