Pass all potentially interesting constraints to plugin (changes API).

We now pass 3 lists of constraints to the plugin: givens, derived,
and wanteds.  Furthermore, the list of constraints will now contain
dictionaries, so one could write plugins for the class system.

In addition, we also change the return type for plugins: now plugins
don't need to return "all other constraints".  In the case of contradiction,
plugins just return the conflicting constraints, and in the case when
things were OK, plugins return the solved constraints + new work.

This is not only simpler, but might makes things more efficient as we
don't rebuild the entire inerts set all the time, instead we just delete
the solved/contradicting constraints.