I think there's a (minor) design mistake here that should be corrected before this code goes into Traits:  it would be better if the `condition` takes a single argument; `obj` will be passed for that argument when waiting for the trait.  In most cases the condition depends on `obj`, so it's a little bit more convenient (and also a little bit less fragile) that way.

I know this wil mess up a current project that's using this code, but I think it's better to fix that project than to enshrine the design mistake.