Support for HOTP

This breaks the current API. Please review carefully.

HOTP is useful for hardware tokens (like http://www.ftsafe.com/product/otp/hotp). It is compabile with Google Authenticator.

Also:
* UsedCodesManager is now external and has an public interface. Users can now decide how to implement it (with a database, with redis, with memcache, ....)
* GenerateKey() is now a static method of Authenticator
* Methods for synchronization (required for HOTP, useful for TOTP hardware tokens)