Handling authentication exceptions and test case

Basically, the changes are:

    - Added an exception to indicate that the user is already logged in when trying to logging with the same credentials

    - Added an exception to indicate that the user is locked + specific event.

    - Created two protected methods on DefaultIdentity to handle successful and unsuccessful login attempts. The idea is centralize how both cases are handled and provide more flexibility for custom implementations.

    - Added a initial test for authentication using the default authenticator, IdmAuthenticator.