Separate the UI and file sharing

There's a regression though: start two instances with the same port,
and the second one will abort when the FileServer object is accessed
anytime after Soup.Server.__init__()
  assertion failed: (self->obj->ref_count >= 1)
Horrible hack to make code work without subclassing Soup.Server

Quoting a code comment:
  just shoot me for this... I want this class to subclass
  Soup.Server but the fucker aborts in __init__ if the port
  is already in use. I have to use GObject.new() to get the
  exception that should happen in that case. So this is my
  workaround "subclassing" for now:
Add support for mDNS/Avahi/Bonjour

In other words, advertize the existence of a local website over
mDNS so users of some browsers (at least safari, epiphany) can
see it in their bookmarks.
Avahi AddService() TXT data is an array of strings, not a string
Use GLib.get_real_name() to identify server

Use the name in avahi advertisement and website header
use logging module
respond to favicon request, and wrong uris
Remove useless HEAD optimization from handle_download_request()

ffs itself only requests HEAD from root so this is not useful.
refactor on_soup_request()
Update upload count even if not offering downloads
refactor get_upload_filename()
update TODO
typo fix