refactor(*): start move to explicit initialization/finalization,
explicitly initialize/finalize options

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(*): explicit initialization/finalization for serialization
modules, expression annotations, and tactics
refactor(*): explicit initialization/finalization for environment extensions
refactor(frontends/lean/builtin_cmds): explicit token initialization
refactor(util): explicit initialization/finalization
refactor(frontends/lean): explicit initialization/finalization
refactor(library/tactic): explicit initialization/finalization
refactor(library): remove dead files
refactor(library): explicit initialization/finalization
refactor(kernel): explicit initialization/finalization

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(kernel/record): remove kernel extension for records, we will
implement it outside of the kernel on top of the inductive datatypes
refactor(frontends/lean/server): explicit initialization/finalization
fix(frontends/lean/class): missing explicit initialization/finalization
refactor(util): explicit initialization/finalization
fix(util/sexpr): missing explicit initialization/finalization
refactor(util/numerics): explicit initialization/finalization
perf(kernel/replace_visitor): use more expensive/precise cache

It does not use pointer equality, but structural equality
refactor(util/rb_tree): remove optimization that creates problems for
some compilers
refactor(util/memory_pool): simplify memory_pool, it is not a template anymore
refactor(*): remove dependency to thread_local C++11 keyword, the
current compilers have several bugs associated with it

We use the simpler __thread (gcc and clang) and
__declspec(thread) (visual studio).