refactor(kernel): start version 0.2, new kernel with universe polymorphism and better/cleaner support for metavariables

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(kernel/level): new universe level datastructure for universe level polymorphism

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(kernel): add difference constraint solver with backtracking support, and justification generation, this solver will be used to check the satisfiability of universe level constraints

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(kernel/diff_cnstrs): copyright msg

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(kernel/expr): adding suport for universe polymorphism, and simplify metavariable representation

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(kernel/diff_cnstrs): missing include

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(kernel/expr): add expr constructors, and expression equality test

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(kernel/expr): for_each and find functional objects

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(kernel/expr): for_each_fn, replace_fn, and find_fn without templates

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

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