RF/ENH: constraints -- use __or__ and __and__ for concise semantics, improved testing, EnsureValue -> Constraint