Introduce new solver combinators

- RewritingSolver
- DNFSolver
- UnrollingSolver
Re-introduce type hierarchy for solvers, simplify factories

Solvers wrap solvers or factories, depending on the needs.
Factories no longer wrap factories, except for the special case of
timeoutsolverfactories (it does it in a typesafe way though).

Fix TupleRewrite with new posts, fix ScopeSimplified, Fix pretty printer
Update README.md for installing python-numpy

User has to install python-numpy for running MaSh filter
Merge remote-tracking branch 'lara-leon/master'

Conflicts:
	src/main/scala/leon/solvers/z3/FairZ3Solver.scala
	src/main/scala/leon/synthesis/Synthesizer.scala

The lara-leon/master has a clearer interface for Solvers

- I remove timeout function out of uninterpretedSolver
- Fixed some mistakes when merging ;)