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!
We should make sure we call all the callback objects that are still pending inside this dict before resetting it. If we don't we will be blocking some other piece of code that is waiting for our requests to return.