Join takes a SoCo instance, use more topology

- Adds an `is_visible` property.
- `partymode` uses new topology code
- `join` now takes a SoCo instance, not an ip address, so to join two speakers:

```python
z1 = SoCo('192.168.1.101')
z2 = SoCo('192.168.1.102')
z1.join(z2)

```

Closes #124