Fix error handling, extend testcases, add errors to documentation

* Searched for error-codes and had to look into source code
* maybe this is useful ;)
then maybe it should export `JsonWebTokenError` too.

i don't know what the intent here was but to me, it looked like this code was heading towards having a separate error for each kind of failure - e.g. `IssuerMismatchError`, `AudienceMismatchError`, etc.  if each of those errors and `JsonWebTokenError` were exported then code could use `instanceof` to handle those errors.

for code that wanted to respond differently to each kind of error they could check `instanceof` against the specific error they wanted to handle.  if instead, the handling code didn't care about the exact type of error but only wanted to distinguish between `JsonWebTokenError` and other kinds of errors then all of these errors would be instances of `JsonWebTokenError` and the code could respond one way for known `JsonWebTokenError` and another for other (unknown) errors.

like i said, i don't know what the intent was but to me that was what this was looking like it was shaping up to be.