Introduce EncryptedPKModel.

The model supports additional 'encrypted_id' property that does create
unique non-sequential hex-identifiers from field identifiers.
activation: use encrypted_id for activation token.
Introduce ExternalBackend for handling external auth.

Whenever external authentication doesn't really fit the simple auth
model django has, ExternalBackend can be used to inject successful
authentication. This is done through the additional 'ext_authed'
argument which determines the result of the authentication.
Establish simple SSL client certificate auth.

The auth is based on matching e-mail addresses from valid (and trusted)
certificates onto system users.

Whenever user requests SSL cert auth, he is redirected to a dedicated
vhost where the HTTP server requests the certificate. Once there,
ssl-auth view checks the verification result and obtains e-mail
addresses from the certificate. The e-mail addresses are compared to
system users and if a match occurs, an authentication token is created.

The ssl-auth view redirects back to login, passing either the token, or
error message. If a valid token is passed, ExternalBackend is used to
sucessfully authenticate the user. Otherwise, the error message is
printed alike regular login messages.
Merge pull request #33 from mgorny/encrypted-pk-model

Encrypted pk model
Merge branch 'ssl-auth'

Conflicts:
	okupy/accounts/models.py