InMemoryLruCache
A ChallengeChecker which checks for replay of challenges via an in-memory LRU cache which holds up to maxCacheSize challenges. Challenges are considered invalid if they are already present in the cache, which prevents replay (reuse of challenges). Checking a challenge will affect the ordering of the cache, making it more-recently-used.