fix(util/memory): redefine the non-throwing versions of the new
operator.

In some platforms, the following operator new is used

   void* operator new(std::size_t sz, std::nothrow_t const &)

Since, it was not defined by memory.cpp, a crash would happen whenever
our delete was invoked.

   void  operator delete(void * ptr) throw() { return lean::free(ptr); }

Our delete assumes the memory was allocated with our new at memory.cpp

   void* operator new(std::size_t sz)
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