Cleartext, the dummy cryptography provider

Dummy API for storing token challenges without any encryption nor key
derivation.  Having it greatly simplifies the design.
Defining models which are used in specs

Refactored to make adding another models way easier.
Feature specs for cryptography
Integrate cryptography providers
Naming: distinguish token from challenge

From now the random value is called "challenge" and the composition of
it and record's id is called "token".
Better spec names
Building token abstracted
Security providers may forbid challenge decryption

Key derivation and hash functions aren't reversible by design.
Column#challenge_readable? abstracted