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.
Fix IntInduction
Make sure that we don't register an interruptible while interrupting
Introduce support for methods and multiple objects/fields

Methods:
--------

Methods are now supported in ADT roots only (e.g. single case classes or
abstract classes). The phase `MethodLifting` converts them to normal
global functions which makes them transparent to the rest of Leon.

Introducing Leon Library:
-------------------------

Common structures and functionalities can be shipped as part of the
Library.scala file, which is a set of ADTs with methods.

Imported via `import leon.Library._`

New Annotations:
----------------

- @verified means library function will not be considered for verification
  unless specifically given through --functions

- @proxy allows non-pure bodies, which will be silently ignored.
  pre/post need to be in purescala.

Functions without bodies (e.g. proxy methods) are now materialized with
a choose construct automatically, replicating the post-condition. This
allows compilation to bytecode and execution of VCs refering to proxy
methods.

Tree Modifications:
-------------------
- FunDef now have params, not args.

- VarDecl is renamed ValDef.

- Added methods in ClassDef, as well as This and MethodInvocation,
  both are converted to normal function calls by the MethodLifting
  phase.
Include classdef in method call, to extract method return types
Fix handling of fields of case-classes v.s. method calls
Fix Choose handling in ImperativeCodeElimitation
Indent properly based on line indentation, not position. Fix printing
Include documentation about using Leon within eclipse
Prevent IntegerEquation from generating empty sub-problems
Collectors with paths should recurse beyond first match
EnumeratingSolver / PortfolioSolver

Use a datagen-based solver to find simple counter-examples. Note that
this solver returns Unknown most of the time, so it is best to combine
it with a full-fledged solver.

PortfolioSolver allows us to combine solvers and have them run in
parallel. The first result (!= Unknown) is used. Solvers can be selected
for verification using the --solvers option.
Implement the Leon library. Support classes and methods.

- Implement the Leon Library in Leon-land rather than Scala-land.
  import leon.Utils._ becomes import leon.lang._
  import leon.Annotations._ becomes import leon.annontation._

  For now, the library defines generic Options and Lists.
  The library is automatically imported from the ./leon script, unless
  the --library=no option is passed.

- Support parsing of multiple files and modules.

- Introduce new annontations:
    @ignore: remove definition from Leon
    @verified: do not consider for verification unless explicitly
        specified