Refined Solver apply/run to support errors

Added the use of Scalaz's Either type in preparation for better error
detection/reporting.
Added problem consistency checks to TreeFiniteDomainSolver

It found an error in SolveAllIntervalsUseCase too.  Right now, there are
two variable consistency checks being enforced.  These two are very easy
to both find and erroneously introduce in a CSP, so these should be a
big win.