Finish first-pass design of MediaController

MediaController now creates a separate thread so that it can run a
GLib main loop without interfering with the rest of the
application. Accepts commands to shut down and to read tags from
a audio file (passes the existing tests), all other functionality
is only stubs.