yet another pattern: the implementations of DomainVisitor2 are no longer
static (hence they are stored in DomainVisitor2Factories).
So the cross "visitor" (inter subdomain visitor) can store the reference 
variable d2 and the "visit" method calls can be simplified and made more
similar to actual "visit() calls.
The price for this is that a new Visitor is created (and then presumably
destroyed) at each visit (e.g. at each isEqual operation)
renamed several methods to more descriptive (and longer) names
renamed DomainVisitor2 to DomainVisitorOnethefly