Support Python 3 using six

Generally speaking, I was having a lot of trouble with the `should.throw` assertions on Python 3, as least in my local testing. Seemed to be some strange issue with the `socket` module, of all things. I don't understand why it wasn't working, and I could try reverting these changes to see if the tests run better on Travis than they do on my machine.