Handle when an OpenSSL error doesn't contain a reason

(Or any other field)

You can reproduce the error by running:

```
treq.get('https://nile.ghdonline.org')
```

from within a twisted program (and doing the approrpiate deferred stuff).

I'm unsure how to craft a unit test for this
Wait… does *not* raise `TypeError`?  Shouldn't it be talking about what it *does* raise?

`ValueError` is an exception which lots of built-in things raise and which might easily be confused if there's some other sort of implementation bug here; this is why I use `ZeroDivisionError` for my go-to "application exception" if I'm going to use a standard exception at all and not just define my own type.