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.
Oops should be static indeed. I've written it to be an empty implementation for `AuthenticationSession` (with no-op behaviour for the methods). When you're writing a `AuthenticationProvider`, and do not have to override / implement all methods for the `AuthenticationSession`, you can extend this version instead. (At least thats how I thought of it)