refactor(kernel/type_checker): combine type_checker and type_inferer into a single class, and avoid code duplication

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(frontends/lean/parser): allow tactic to be used to fill holes in definitions

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add normalize_tac, eval_tac and trivial_tac

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add support for Pi's at to_proof_state

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(tests/lean/norm_tac): display implicit parameters to make sure output can be parsed

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util/exe_location): add function for finding the location of the executable

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util/lean_path): add support for LEAN_PATH

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(frontends/lean/frontend_elaborator): use is_convertible to minimize number of coercions

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(frontends/lean/frontend_elaborator): use is_convertible to minimize number of coercions