Reworked the AuthenticationBackend

Reworked the `AuthenticationBackend`. 
* Moved LDAP attributes to config file
* Cached password for when LDAP is down in labwork
* Improvements for building other `AuthenticationBackend`s, with a basic example using passwords from the Devhub database

The check for users to be existent in the Devhub database, shouldn't be in the `LdapBackend`. Now, this is moved to a `AuthenticationBackendImpl`, which is supplied with a `AuthenticationProvider`, for example the `LdapAuthenticationProvider`.

The `AuthenticationProvider` interface contains of three methods (authenticate, fetch (User) and synchronize (User).

The `LdapAuthenticationProvider` is heavily based on the existing `LdapBackend`, but also provides a caching mechanism for when there are issues connecting the LDAP server. When connection fails, the backend checks against a cached (salted) password stored in the database. This might be useful in the labwork, when we want Devhub to be available even if the LDAP server is down. The LDAP properties are moved to the config file so that these attributes can easily be changed.

Furthermore in this commit is a `BasicAuthenticationProvider`. This one doesn't use LDAP but rather checks passwords against the database (again, salted). This might be useful when other universities want to get started with Devhub without LDAP. However, there isn't any mechanism to add/register users in this commit.
I do not log this issue, because it only means that the password doesn't match the password in the database (or the user isn't even found) in the database, and the interface says that in that case a boolean false should be returned. Whereas the `IOException` and the `AuthenticationProviderUnavailable` - which are quite impossible to ever occur for this implementation - should be logged.