refactor(kernel/metavar_env): use the same approach used in the class environment in the class metavar_env

This modification was motivated by a bug exposed by tst17 at tests/kernel/type_checker.
metavar_env is now a smart point to metavar_env_cell.
ro_metavar_env is a read-only smart pointer. It is useful to make sure we are using proof_state correctly.

example showing that the approach for caching metavar_env is broken in the type_checker

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(kernel/metavar_env): use the same approach used in the class environment in the class metavar_env