Base implementation of an SMTLib printer/solver
Improve/Fix SMTLib solvers

- Implement smt and smt-z3/smt-cvc4 as options for --solvers

- Uses a main solver sources for verification/CLP, taking into account
  --solvers

- Implement Z3-SMT sets

- Add tests for Z3-SMT
Support get-model for arrays in z3-smt
Unify and simplify function templates and unrolling banks

- Both Expr-based solvers and z3-based solvers rely on same template
  generation routines and unrolling strategy. Templates and unrolling
  bank is refactored in solvers.templates._

- Encoding is done through TemplateEncoder. Performance highly relies on
  an efficient TemplateEncoder.substitute() implementation.
Implement and test everything for smt-z3

 - Partial support for CVC4
Use most recent version of scala smt-lib

Update the build to reference the most recent version of
scala smt-lib and adapt the code to the new API.

Replace some use of NonStandardCommand by built-in standard
Commands of scala smt-lib.
Fix support with new SMT-Lib API (base + Z3)