I realize this is more consistent with other classes in this module, but I'm not entirely clear why `**cons` is used rather than naming the constraint arguments explicitly.  Subclasses could use `**cons` for brevity, but I thought it made sense to have them explicit at least in the base class.

If nothing else, I would raise a TypeError if any unrecognized constraints are passed in.  Currently if one mistyped a constraint argument it would just be ignored...