def sbyc(super_domain = Object, &pred)
      Class.new(super_domain){ extend SByC.new(super_domain, pred) }
    end
def sbyc(super_domain = Object, &pred)
      Class.new(super_domain){ extend SByC.new(super_domain, pred) }
    end
Creates a domain through specialization by constraint

 @param [Class] super_domain
   the super_domain of the factored domain
 @param [Proc] pred
   the domain predicate

 @return [Class]
   the created domain as a ruby Class

 @api public