feat(kernel, library/elaborator, frontends/lean): improve how elaborator_exceptions are displayed in the Lean frontend

This commit affects different modules.
I used the following approach:
1- I store the metavariable environment at unification_failure_justifications. The idea is to capture the set of instantiated metavariables at the time of failure.
2- I added a remove_detail function. It removes propagation steps from the justification tree object. I also remove the backtracking search space associated with higher-order unificiation. I keep only the search related to case-splits due to coercions and overloads.

3- I use the metavariable environment captured at step 1 when pretty printing the justification of an elaborator_exception.

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
chore(*): name convention, proof construnction functions/macros start with upper-case

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(frontends/lean/parser_calc): missing save calls

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
doc(examples/lean): add a new example with even/odd numbers

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>