refactor(util/script_state): remove unsafe unguarded_apply

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(util/script_state): replace std::recursive_mutex with std::mutex, and use unlock_guard

The unlock_guard and exec_unprotected will be useful also for implementing the Lua tactic API.

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(util/optional): typo

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): expose tactics in the Lua API

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>