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.
More of a cosmetid thing really. I haven't had a chance to test this yet, but assuming that the the tags for all of these variables are also camel case, one could consider converting them with camel_to_underscore from utils. Since we probably would do that if they were their own variables, then I think makes sense to also to it for these dict keys.