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
avahi: Fixes from review comments
avahi: Add hostname and port template values to names
avahi: Simplify config to single value
avahi: More review comments and some other fixes.

- Switched to newstyle class
- Switched to safe values in kwargs
avahi: Remove use of config_section
Merge pull request #573 from adamcik/feature/avahi

Cleaned up version of #558 - Add avahi publishing of MPD and HTTP server endpoints.