text: Title: DecodeError use is inconsistent with api of AuthlibBaseError
  Body: **Describe the bug**
  
  It appears that everywhere that `authlib.jose.errors.DecodeError` is raised, it is raised as e.g. `raise DecodeError('message')`. Due to the API of `AuthlibBaseError` being `(error, description, uri)`, this overwrites the short-string error code of DecodeError.
  
  **Error Stacks**
  
  ```python
  Traceback (most recent call last):
    File "/usr/lib/python3.8/code.py", line 90, in runcode
      exec(code, self.locals)
    File "<input>", line 1, in <module>
    File "/usr/lib/python3.8/site-packages/authlib/jose/rfc7519/jwt.py", line 103, in decode
      raise DecodeError('Invalid input segments length')
  authlib.jose.errors.DecodeError: Invalid input segments length: 
  ```
  
  **To Reproduce**
  
  ```
  from authlib.jose import jwt
  jwt.decode("hello", "this is my key")
  ```
  
  **Expected behavior**
  
  The last line of the traceback to read `authlib.jose.errors.DecodeError: decode_error: Invalid input segments length`; or, if `JoseError` is caught as `exc`, `exc.error` to equal `'decode_error'`.
  
  **Environment:**
  
   - OS: Ubuntu 20.04
   - Python Version: 3.8
   - Authlib Version: 0.15.5
  
  **Additional context**
  
  I looked to see if this was fixed in 1.0.1, but it does not seem to have been addressed: https://github.com/lepture/authlib/blob/10cec2518fe0cc275897f12ae3683d4823f82928/authlib/jose/rfc7519/jwt.py#L100
  