Implement two factor authentication

If enabled, require a second factor to acquire a session cookie and
reject basic authentication attempts (as second factor cannot be
presented). Allow previous and next token for clock skew.

To enable this, you add a "2f" object to your user doc with a secret
"key" value.

This work is currently missing tests and documentation, and we'll
also want a UI (to render a QR code with an otpauth url for easy
setup).
Can we make algo configurable? Let it be by default those which will give us compatibility with older erlang releases, but people with modern one will be able to change since they don't need in such compatibility.