The ChallengeProvider trait provides the methods to be implemented by the challenge providers.
The framework gets a challenge from a challenge provider, inserts the details of the challenge into the database, and gives the challenge to the user. It then gets the answer from the user, and sends it to the challenge provider for verification.
This commit includes the implementation only for FilterChallenge provider.