Wimp part 2 (browse method), better generalized music service data structures

I must learn to break this down into smaller chunks as it always seem like a marathon when I have to send stuff in. Anyway, here it is, part 2 of the wimp plugin, which now allows you to browse the music as presented in the app and the data structures has now been generalized so much that I believe they can be used for other services as well.

As far as wimp goes I have added a `browse` command. Called with no arguments, it will return the elements in the root of the music tree i.g:

```python
import soco
soc = soco.SoCo('192.168.0.12')
wimp = Wimp(soc, 'wimpusername')
root = wimp.browse()
print root
{u'count': '15', u'item_list': [<MSAlbumList 'Mine playlister' at 0x1521e10>, <MSFavorites 'Favoritkunstner' at 0x15d7a50>, <MSAlbumList 'Favoritalbum' at 0x15d7a90>, <MSPlaylist 'Favoritsange' at 0x15d7ad0>, <MSAlbumList 'Favoritplaylister' at 0x15d7b10>, <MSAlbumList 'WiMP top 40 album' at 0x15d7b50>, <MSPlaylist 'WiMP top 20 sange' at 0x15d7b90>, <MSAlbumList 'Nye playlister' at 0x15d7bd0>, <MSAlbumList 'Nye album' at 0x15d7c10>, <MSPlaylist 'Nye sange' at 0x15d7c50>, <MSAlbumList 'Anbefalede playlister' at 0x15d7c90>, <MSAlbumList 'Anbefalede album' at 0x15d7cd0>, <MSPlaylist 'Anbefalede sange' at 0x15d7d10>, <MSCollection 'Albumlister' at 0x15d7d50>, <MSAlbumList 'Hi-Fi klubben anbefaler' at 0x15d7d90>], u'total': '15', u'index': '0'}
```

called with one of the ms items from this result as the argument, it will show the underelements of that i.e:

```python
wimp.browse(root['item_list'][6])
{u'count': '20', u'item_list': [<MSTrack 'Happy Home' at 0x15d7dd0>, <MSTrack 'Jalousi' at 0x15e1610>, <MSTrack 'I See Fire' at 0x15e1690>, <MSTrack 'Rather Be feat. Jess Glynne' at 0x15e1710>, <MSTrack 'Cliche Love Song (Original Version)' at 0x15e1790>, <MSTrack 'Twerk It Like Miley' at 0x15e1810>, <MSTrack 'Fred' at 0x15e1890>, <MSTrack 'Do Ya (Vindersang)' at 0x15e1910>, <MSTrack '#SELFIE' at 0x15e1990>, <MSTrack '?de ?' at 0x15e1a10>, <MSTrack 'Strip Pt. 1' at 0x15e1a90>, <MSTrack 'Counting Stars' at 0x15e1b10>, <MSTrack 'Happy' at 0x15e1b90>, <MSTrack 'Sandstorm' at 0x15e1c10>, <MSTrack 'Prototypical' at 0x15e1c90>, <MSTrack 'Julia' at 0x15e1d10>, <MSTrack 'Waves' at 0x15e1d90>, <MSTrack 'Money On My Mind' at 0x15e1e10>, <MSTrack 'Addicted To You' at 0x15e1e90>, <MSTrack 'Rainmaker' at 0x15e1f10>], u'total': '20', u'index': '0'}
```

I anyone wants to test this new functionality you can download [this file](https://github.com/KennethNielsen/SoCo/blob/wimp_part2_tests/soco/plugins/test_random.py). When run, it will take a random walk down the music tree and choose one of the playable items at random to put in the queue and then let you listen to 15 s of the first track from that and then do it all again. It is a nice way to randomly test the reliability of the code.

There are still some problems with this. In some cases (rarely) you might get a UPnP 800 error, but I have not yet figured what triggers. I am unable to reproduce it by excising the same MS items, so I will have to do some more digging. But the code is quite stable, so it should definitely be doable.

Next is docs, tests and writing docs about how to implement a plugin that uses the ms data structures.

Let me know what you think.