added second type parameter to ComplementsOnCollection
renamed SimpleStringComplements to UnaryComplements<T> and implemented
it as a object wrapper rather than a singleton ArrayList
removed the essence field from CompositePhrase, which is no longer 
subclass of AtomicPhrase; introduced Phrase interface
renamed PredicateBasic to AtomicPredicate, since it conforms to the 
Atomic naming pattern
adding a Complements argument to the compose() method
made compose a generic method, so that the created CompositePhrase has
a specific Complements sub-type (rather than just Complements itself)
without the need of declaring this sub-type into the Predicate type
removed the type argument to Predicate (since we have already
AtomicPredicate<T>
removed AttributeBasic whose semantic didn't make any sense;
created class Subject, subtype of UnaryComplements and Complement
created Predicate2, which declares the Complements type explicitly;
this allows to define interface Attribute as a Predicate2<Subject>
added closed() and definite() booleans to support for arity and
non-arity
predicates
added arity() to Complements