Advertise MPD with Avahi

A rudimentary implementation to resolve #39, ignoring dbus errors (just restart), name collisions (choose a fresh name), etc.
Avahi python compatibility fix
Avahi wrapper moved to utils
Avahi constants named
Avahi hostname choice extracted for reuse
Advertise HTTP with Avahi
avahi: Style and code cleanups in zeroconf module.

- Prepare for handling missing dbus directly in module.
- Constants should always be all caps.
- Extracted helpers from class to convey intent via their naming.
- Moved imports out of class, imports should always be on the top.
- Made sure calling publish mutiple times does not re-convert text.
- Made sure calling unpublish without publish does not break.
avahi: Improve error handling for dbus errors.

- Handle dbus not being installed.
- Handle not finding the system bus.
- Handle not finding the avahi service.
- Return if publish succeeded.
avahi: Convert MPD and HTTP to use cleaned up versions

- Move imports to top as they should be.
- Report state based on publish return value.
- Remove overly broad except clauses.
- Unpublish before stopping servers.
avahi: Only convert single string at a time in helper