solver: add basic solver, hash and bigmem cache
utils: add stringf function to make formatted text

Use the printf family instead of the print with packed argument.
todo++
efyj: add a --stress mode

The stress mode compares solver and caches on a random options lists.

For example:

$ efyj -s 100 Car.dxi
- run stress mode for 100 random run
Processing tests/Car.dxi
Time elapsed to:
- read model........ : 0.000452362s
- get response for random 100 options:
  - basic solver.............. : 8.5067e-05s
  - hash cache................ : 0.00240485s
  - hash cache (string)....... : 0.00217849s
  - big memory cache.......... : 0.00111104s
  - big memory cache (binary). : 0.0009328s
README: update
bigmem: improve bigmem cache

Improve time to use the bigmem cache by 50%.

- Use a new alogrithm to compute the index of the array. This algorithm
  use the shift operator (<<) over the std::pow.

- Remove the pimpl idiom.
main: add color to the stress result

The minimum and maximum time to resolve the random stress are show with
red and yellow colors.