Add SCC around freenm, which I fear could be slow.
Implement or_bool function for all backend solvers.

Leads to a minor improvement across the board, and avoids some stupidity
in the minisat backend.
Don't keep rereading the model for yices2.

Because it's slow.
Pulled Yices2 AST into a different module.

In preparation for specializing the Assert traversal for it.
Manually specialized and inlined methods in assert.

Because I don't fully trust GHC to do it form me, especially when
we go to specialize the solver too.
Don't rely on yices2 to map freeid's to terms.

Instead keep our own table.
Merge commit '4275b65f84895a2b5245a930aa1c2787e77ac8e5'
Don't use a reader monad for the assert traversal.

A decent performance improvement, especially for the high-level apps.
Record fresh variables names rather than trying to replay them.

Apparently this is much better for sudoku, but really this is intended
to allow more flexibility in the Fresh monad implementation, because it
no longer needs to be deterministic.
Switch to unsafeIO to allocate FreeIDs instead of Fresh monad.
Got rid of Fresh monad and updated performance numbers.
Switch to GHC.Base.Any instead of Dynamic in AssertCaches.
Make a CacheEntry type instead of a Maybe tuple.
Do CNF conversion for minisat in c instead of haskell.
Minor cleanup of select function interface.

Return just an enum of which arguments were evaluated, not a copy of the
arguments themselves, because the caller already has the arguments.
Renamed Assert traversal Build.

Avoids overloading of 'assert', and I think makes more sense for what
the traversal does.
Renamed getValues method getModel.
Minor cleanup of Yices2 AST.
Implemented getModel for Z3.
Implemented getModel for yices1.