Updates complement/isComplement functions

 * It takes into account AtLeast/AtMost constructors
 * Some more complement specific tests were added
Adds a function that computes all possible substitutions

It is used in At-Most restrictions
Updated function to compute possible substitutions

Even though the new function is quite mre efficient than the older one,
it still has a lot of limmitations, so we may not use it at all
an compute only substitutions of one level
Partial support for AtMost constructors

    Partial because:
      * No exaustive testing
      * Does not keep track of the AtMost rule, as it *should* do,
        for future reference