Special event processing for LastChange events

Incorporating @robwebset 's ideas into the event processing code - see #189

To see it in operation:

```python
try:
    from queue import Empty
except:  # Py2.7
    from Queue import Empty

import soco
import time
from pprint import pprint
from soco.events import event_listener
# import logging
# logging.basicConfig(level=logging.DEBUG)
# pick a device
device = soco.discover().pop()
sub = device.renderingControl.subscribe()
sub2 = device.avTransport.subscribe()

while True:
    try:
        event = sub.events.get(timeout=0.5)
        pprint (event.variables)
    except Empty:
        pass
    try:
        event = sub2.events.get(timeout=0.5)
        pprint (event.variables)
    except Empty:
        pass

    except KeyboardInterrupt:
        sub.unsubscribe()
        sub2.unsubscribe()
        event_listener.stop()
        break
```

Then fiddle with your volume/add tracks/play etc

The next step would be to integrate this with #192 so that track metadata is returned as an ML_Library_Item instance, once #192 is committed.
Towards the end here, it would also be possible to add some type conversion and possibly field duplicatio as mentiond in the conversation, if we think that is a good idea.