New Ensuring/Require/Assert trees

- Ensurings/Require are now proper purescala trees
- Introduce Assert as a tree
- Simplify tactics to support arbitrary asserts/errors/inner ensurings
- New phase to inject assertions for unsafe calls (array/map access)
- Refactor Default and Induction tactic
Rework pretty-printers with interpolation magic
Fix printing bugs, add synthesis->print tests