Refactor Interruptions, Solvers, Reporters

Interruptions:
-----------------------

Interruptions are handled by a Context-global manager, to which components required to be interrupted can attach themselves to. The interruption manager provides both passive and active interrupts, via a flag "isInterrupted" and/or by implementing "Interruptible" and getting interrupt()'ed.

By consequence, verification can be aborted "gracefully" via Ctrl+C now.


Solvers:
-------------------------

- Separate solvers (check/assertCnstr) from solver factories (getNewSolver).
- Old API (solveSAT/..) is moved to a SimpleSolverAPI wrapper.
- Solvers now define a free() method that can be called to free resources, important for Z3 Solvers.
- Synthesis refreshes solvers for each task instead of reusing one main solver. This prevent huge memory leaks.


Reporters:
-------------------------

Parts of Leon can use the Reporter's debug() or ifDebug() methods to report/execute code when debug is enabled for this section. An implicit ReportingSection needs to be in scope.

--debug / --debug=all turns on all debug messages.

Several timers are implemented to decompose the time used by Leon. Displayed under --debug=timers


Tests:
-------------------------
The test suite now implements a global test timeout of 5 minutes, which interrupts Leon via the interrupt manager.