add more descriptive error messages for a couple common conditions

When using OpenSSL there are a lot of errors that can come out with
terrible messages and all under the same CipherError class. This makes
it difficult to track down exactly where the problem is. To combat this
we can rescue from the CipherError, look at  the message and re-raise a
new error with a better message. Because we may still need the original
info to report upstream bugs we are capturing the original in the newly
raised error as `#cause` which is compatible with the way 2.1 is going
to work.