refactor(kernel/expr): remove code duplication
refactor(kernel/expr): remove dead code
refactor(kernel/expr): remove silly overloads
refactor(kernel/expr): remove dead code
perf(library/unifier): avoid unnecessary wasteful computation
perf(kernel/metavar): minor improvement
refactor(kernel): replace_visitor doesn't need to be in the kernel anymore
feat(util/rb_tree): add find_if method
perf(kernel/metavar): improve occurs_expr and occurs performance
feat(util/buffer): expose capacity method
perf(kernel/replace_fn): use 'recursive' replace_fn for "small" terms
chore(kernel/replace_fn): "name" constant
perf(kernel/expr_eq_fn): use thread local cache, and avoid memory allocation/deallocation
perf(kernel/metavar): used thread local cache for instantiate_metavars
perf(util/list): use memory pool for list cells
fix(kernel/metavar): compilation error in some compilers
refactor(kernel/instantiate): cleanup beta-reduce
fix(init): initialization problem
feat(frontends/lean/parse_table): add get_head_index auxiliary function for indexing notation declarations
feat(frontends/lean/parse_config): add get_notation_entries auxiliary function for returning the list of notation declarations that start with a given head symbol

This API is need to take notation declarations into account when pretty
printing expressions.