Custom error types

This pull request adds custom error types for the various types of Redis errors. This allows you to do some reflection on the type of error returned without looking at the error string. For instance, you may want to handle a ConnectionError differently than a ProtocolError.

It also has some fixes for running tests.