Reconnection

Reconnection/error handling, hot off the presses!

Fairly simple stuff. Only took me two days to get it done. :P 

The idea is, reconnect the socket when read gets a socket exception and retry `tries` times (or forever if `tries` is None) every 5 seconds. If we can't connect in the allotted tries, set `stop` and toss one last exception. All the while this is happening, `send_message` will throw proper exceptions as to what the situation is.

As an aside, I also set `stop()` on chromecasts connected but then immediately excluded by filters. Was icky to do otherwise, because they still run in the background (I noticed while looking at exception logging and seeming them also reconnecting in the background).

Anyways, this makes pychromecast about a billion times more useful for me, so I hope you dig it!
Reconnecting should be a transparent process for the user. By resetting the handlers after each connection attempt we are forcing the user to re-register its handlers but there is no way for him to detect if a reconnection has happeend.