[wip] basic implementation of a Solver monad

the initial use case is tracing: record all choice points taken to be able to understand
how the solution was computed. Having solutions computed inside a monad (Actually a monad transformer)
opens the door to various usages, like compilation or a better interpreter