refactor(library/tactic): simplify tactic framework, add orelse and try_for combinators/tacticals

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(library/tactic): clean up try_for

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add append, interleave and par tacticals

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add repeat and repeat_at_most tacticals

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add take and force tacticals

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util): add optional template

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(util/lazy_list): 'lazier' lazy_lists

In the new implementation, even the head of the lazy list is computed on demand.

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add mk_simple_tactic template

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util/lazy_list): check for interruption between pulls

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(lazy_list): add timeout template for lazy_lists

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util/lazy_list): add par template for lazy lists)

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(library/tactic): modify par and try_for tactics

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
style(util): missing includes

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
style(library/tactic): missing include

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(util/lazy_list): polish lazy_list API

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

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(util/lazy_list): par template missing case

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(library/tactic): cleanup

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util/lazy_list): add repeat and repeat_at_most templates for lazy_lists

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): refine repeat and repeat_at_most tacticals

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