Logical Device Support

cc/ @bencevans 

Changes:
- Changed [Listener](https://github.com/stephen/node-sonos/blob/logical-devices/lib/events/listener.js#L10) class to think in terms of "handlers" instead of "endpoints." This makes more sense because you might have multiple handlers for a given endpoints' events, so "client" code should think about handlers logically. I don't believe any previous code used these, but it could technically be considered a breaking change (API changed `addService`/`removeService` to be prefixed with `_`.
- Added `LogicalDevice` class. Takes in an array of Sonos devices that can be managed together (i.e. forms a group or stereo pair). This class currently supports group change for volume. The API between a `LogicalDevice` and regular `Sonos` device should be identical. (Commands that are only addressed to the coordinator (e.g. play/pause) are simply passed down to the underlying `Sonos` prototype.
- Added a `volumeListener` class to keep internal state on a `Sonos` object. Used by `LogicalDevice` to do volume changes (but not on other methods).

Missing:
- Lacks a search function. Will be addressed in separate 1.0.0 PR.
- Lacks group impl for `getLEDState`/`setLEDState`. Should be trivial (and also low pri..)
- Does not change the underlying `Sonos` implementation to use the newly cached volume state (should be address by separate PR)
(oops - this should be `initialize()` instead of `startListeners()`)

We previously discussed doing initialization for listeners automatically with search (meaning manually spun up `Sonos` instances would have to `initialize()`) on their own. Are you thinking we should do automatic initialization for any `Sonos` instance? (also, how? since a callback is needed - not sure if it's good practice to do that from a constructor.)