Adapt questionnaires export to new FlatHierarchy class
Correct function name
Extend Tunisia Piped Urban into the future #2360
Uruguay has Piped higher than Total #2360
Prevent infinite recursivity for Sanitation onlyTotal cases #2360
Complete rule for Open Defecation #2360

Similarly to Surface Water, Open Defecation now extends in the past
and avoid values over 100%
Add missing dependency on pdo_pgsql
Prevent zero values when it should be Piped #2360
Add benchmarking script #2358
Cache for getValuePercent missed hit it shouldn't #2358

If asking for a questionnaire data, but another questionnaire had no
answer at all, then the cache was not filled for the second questionnaire.
This lead to an extra SQL query when asking data for the second
questionnaire, whereas we should already have it in cache.

We now ensure that we get all questionnaire for a Geoname in cache, even
empty questionnaire. This avoid a few queries but does not improve speed
significantly.
Mass fetch questionnaire's geoname #2358

We fetch all questionnaire for one geoname at once. This a few queries,
but does not significantly improved speed in most common cases.
Add cache on formula computing on regression level #2358

This may gives a huge boost in speed depending on the rules used.
This is the case for Water which is almost 10x times faster
for /api/table/country.
Correct AnswerRepository updatePercentValueFromChoiceValue function
Extends Piped into the past if Total Improve exist #2360

This is required for Iraq
Allow reference to current year in formula #2360

This allow us to code exceptional cases depending on the year. This
was required to solve exceptional case of Tunisia rural Open Defecation.
Custom rule for Saudi Arabia #2360

We use a variant of standard formula, but drop the extension in the
past so we can extends in the future based on 100% - Improved+Shared.
This needs to be done in order to avoid values going from Open Defecation
to Other Unimproved in 2003-2005.
JMP does not import non-official filters anymore #2353

The non-official filter name is now stored in Question name instead
of a Filter object. This simplify both import and computing process,
and reduce dramatically the total count of filters.
Speed up import process #2353

We minimised the use of flush() to have only three of them. A first
one to be sure that all Questionnaire have an ID if they are used in
formulas. A second, conditionnal one if a Rule is used in a formula.
And final flush() at the very end of the process.

This result in huge improvement and the import now take ~10% of original time.
Sanitation special case of Ratio was broken #2353

If no flush was triggeret earlier, then we were unable to finish
special Ratios for Sanitation properly. This was a direct side-effect
of previous commit. We now rely on memory cache to avoid hitting DB
unnecessarily.
Follow symlink when importing countries