Improve FileInterface, flatten functions with immediate simple LetDefs
Support Choose in evaluation, range positions, tracing.

- Simplify code generation by replacing CompilationEnvironment with a
  simple scope state.

- Support Choose construct in both evaluators.

- Introduce RecursiveEvaluator (renamed from Naive) and TracingEvaluator
  which tracks intermediate values as well.

- Introduce offset as well as ranged positions, extract all positions
  from trees. Try to propagate them as much as possible. Introduced
  .copiedFrom

- Remove dead-code, and improve TreeOps a bit.

- Introduce Pretty-printer arguments
Clean TreeOps API

- remove superfluous implementations doing almost the same
- introduce pre/post traversal and transformers as foreach/map/fold
- Redefine other operations exists, contains, as folds
- Fix freshenLocals bug found by Ravi
Release Leon 2.1
Fix deprecated API
Improve readme
implement missing ArrayUpdated in codegen
Introduce array access VC in DefaultTactic

Previously, array access were generated via a code transformation in
ArrayTransformation in xlang, where Array Select and Update were
wrapped in if-then-else with an Error in the else branch. They are
now natively supported in VC generation.  Some testcases --- that would
trigger bugs when --xlang is not used with functional array ---- are
included in this commit

The commit introduces a new abstraction to traverse Leon trees and collect
path conditions. This traverser is used for the implementation of the
VC generation for arrays.
Rewrite ChooseCollector using generic Collector
fix out of date info in README.md
Unrolling solver takes an incremental solver

UnrollingSolver now uses an underlying incremental solver
and use push and pop to drive the unrolling instead of creating
a new solver each time
remove the need for innerXXX methods

Refactor the TimeoutSolver and TimeoutAssumptionSolver so
that they no longer use innerCheck methods. We now only
create solver as subclassing Solver or IncrementalSolver and
implementing the interuptible trait, and we can turn them into
TimeoutSolver at instantiation time with a mixin.
Remove unused ad-hoc test files
Implement generics for functions and ADTs

- Calling functions are now typed, FunctionInvokation takes a
  TypedFunDef which is basically a FunDef with type parameters' values.
  Instantiation of types within the signature/body is done on demand
  through this wrapper class.

- Operations on ADTs are now taking a *ClassType instead of *ClassDef.
  Similarly, Case/AbstractClassType takes values for type parameters.

- Introduces a GenericValue tree for models targeting abstract types.
  e.g. foo[T](a: T, b: T) { a == b } ensuring (_) will find a model with
  { a -> T#1, b -> T#2 }

- Only "simple" hierarchies allowed with type parameters. All members of
  the hierarchy must define the same number of type parameters and
  correctly pass them to parent classes.

- Type parameters are invariant.
Release Leon 2.2 with generics
Instanciate Lets correctly
Improve printer, improve TypedFunDef, fix variablesOf
remove dead code
Fix @induct creating incorrect type-parametric VCs.

Improve debugging capabilities of Pretty/Scala printer w.r.t. types
Improve debugging for trees. asString now preferred over toString.