LIBPC
-----

* BNF Parser for generation of constraint objects from expressions

* Make better pc_pc_set, pc_param and pc_constraint structures
instead of the current ugly ones.

* Test constraint solution via Read->Generate->Solve->Update routine

* Implement Non-deterministic solution techniques:  Backjumping,
Backmarking

* Implement Deterministic propagators: NC, AC1-7, PC1-5

* Check STL structures in public API ; wrapping with bu_list

* Boost constrained_value based functor integration for 'compiled'
constraints

* Implement Hypergraph representation system

* Explore analytic and symbolic solution system

-----

Looking at flatzinc as a constraint solver independent way to specify
constraints - libpc could use that standard, and then do whatever is needed on
the back end (talk to gecode, Google's or-tools solver, etc. via flatzinc
directly, or translate as needed.)

Might be worthwhile for readability to support the higher level minizinc (or at
least some part of it) and have libpc incorporate the ability to translate
"under the hood" to flatzinc, if appropriately licensed translators can be
found - the G12 project's tools may be of some use, but would have to be
converted from the Mercury language to C:  http://www.mercurylang.org/

Would have to think about a generic C structure to hold minizinc/flatzinc
results in a programmatically useful form - it wouldn't do to parse the text
outputs, although they should be available for debugging if needed...

Minizinc 2.0 is worth keeping an eye on - license is MPL2, which is between
Apache and LGPLv2 from a practical standpoint (can't combine with our code, but
we can use it - do need to provide modified versions of original code, but
license isn't viral):

http://www.minizinc.org/2.0/index.html

It's being actively developed in C++ rather than Mercury, which is a Good Thing
from a support standpoint.

Note that SafeInt, which they call out as being MS-PL licensed, now has an
MIT licensed version available here:  https://github.com/dcleblanc/SafeInt

