Added a constructor which keeps the root cause of the exception

- The main change is to add a new constructor which keeps the root cause of the exception (we don't all want to forget the root cause, in my case it is a DataAccessException and I would like to know about it. Besides, losing the root cause adds a Sonar violation)
- Added some documentation
- Copied the documentation style and the argument name from the root AuthenticationException class, so it is more consistent