Correctly handle SOCKS errors.

So far, we handled SOCKS errors by throwing a SOCKSError to the internal
Twisted code that called our dataReceived(), but that code had no idea how
to handle a SOCKSError.  What we should do instead is call our deferred's
errback, passing the SOCKSError as parameter.  Maybe the application can
handle this case.