Add snapshot class

This class allows the user to take a snapshot of a given sonos device, then later restore it to that state.

Example usage:
```
device = SoCo('192.168.0.14')
snap = Snapshot(device)
snap.snapshot()

# Do something here that changes what's playing etc.

snap.restore()
```

This file requires the folowing changes: #219 #220 

Some mention of a snapshot class was make in https://github.com/SoCo/SoCo/issues/99#issuecomment-55367164

Also if #223 is changed (Ideally to support adding multiple items to a queue in one go) then the performance of snapshotting the queue may be improved.

Yeah. I'm also not sure that the 486 is cut in stone. I think I have seen different sizes and maybe is is actually a transport size limitation, more than a number restriction. I have also in socos written something that takes as many objects as it can at a time and gets the while thing. We could consider addeing a `get_it_all` parameter to get_queue that would be something like that.