Use lucid
Store cached expression in LRUCache

Previously evaluated expressions were stored in HashMap which was
emptied once in an hour by `expireCache` thread.

I propose a better solution which uses `Data.Cache.LRU.IO` from `lrucache` package.

Pros:

- No need to reevaluate often used expressions
- No need for expiring thread
- Harder to maliciously make the server run out-of-memory, however I am not sure
  if that was possible before
- Less code

Cons:

- Lookup and insertion time should take insignificantly longer because:

  1. LRUCache uses `Data.Map` underneath, if I understand correctly we
  get O(log(n)), instead of O(n) as it was with HashMap
  2. It has to check if the limit was reached and pop elements
  accordingly
- Memory usage per element is slightly higher as there is a need to keep
  track of when it was used
- additional dependency

LFU cache would suit better, but I couldn't find haskell implementation (I am
thinking about implementing it myself).

What do you think?
Port to lucid 2.0